diff --git a/pom.xml b/pom.xml index 938fb41088dc..9319178c0bf2 100644 --- a/pom.xml +++ b/pom.xml @@ -55,6 +55,13 @@ commons-collections4 4.5.0 + + + org.junit.jupiter + junit-jupiter + 5.9.3 + test + diff --git a/src/main/java/com/thealgorithms/strings/Alphabetical.java b/src/main/java/com/thealgorithms/strings/Alphabetical.java index ef2974eb427d..7abc9abfb3bb 100644 --- a/src/main/java/com/thealgorithms/strings/Alphabetical.java +++ b/src/main/java/com/thealgorithms/strings/Alphabetical.java @@ -21,12 +21,17 @@ private Alphabetical() { * @return {@code true} if all characters are in alphabetical order (case-insensitive), otherwise {@code false} */ public static boolean isAlphabetical(String s) { + if (s == null || s.isEmpty()) { + return false; + } s = s.toLowerCase(); - for (int i = 0; i < s.length() - 1; ++i) { - if (!Character.isLetter(s.charAt(i)) || s.charAt(i) > s.charAt(i + 1)) { + for (int i = 0; i < s.length() - 1; i++) { + char current = s.charAt(i); + char next = s.charAt(i + 1); + if (!Character.isLetter(current) || current > next) { return false; } } - return !s.isEmpty() && Character.isLetter(s.charAt(s.length() - 1)); + return Character.isLetter(s.charAt(s.length() - 1)); } } diff --git a/src/test/java/com/thealgorithms/strings/AlphabeticalTest.java b/src/test/java/com/thealgorithms/strings/AlphabeticalTest.java index 7b41e11ef22f..a3f8afa8160c 100644 --- a/src/test/java/com/thealgorithms/strings/AlphabeticalTest.java +++ b/src/test/java/com/thealgorithms/strings/AlphabeticalTest.java @@ -8,8 +8,23 @@ public class AlphabeticalTest { @ParameterizedTest(name = "\"{0}\" → Expected: {1}") - @CsvSource({"'abcdefghijklmno', true", "'abcdxxxyzzzz', true", "'123a', false", "'abcABC', false", "'abcdefghikjlmno', false", "'aBC', true", "'abc', true", "'xyzabc', false", "'abcxyz', true", "'', false", "'1', false"}) + @CsvSource({ + "'abcdefghijklmno', true", + "'abcdxxxyzzzz', true", + "'123a', false", + "'abcABC', false", + "'abcdefghikjlmno', false", + "'aBC', true", + "'abc', true", + "'xyzabc', false", + "'abcxyz', true", + "'', false", + "'1', false", + "'abc!', false", // <-- missing coverage + "'ABc1', false" // <-- optional extra + }) void testIsAlphabetical(String input, boolean expected) { assertEquals(expected, Alphabetical.isAlphabetical(input)); } + }