From e638861ac24d74a68639920339ef775d0cc828db Mon Sep 17 00:00:00 2001 From: "Ramit Gangwar (NoiR)" <54339318+TheDarkW3b@users.noreply.github.com> Date: Tue, 15 Oct 2024 16:39:55 +0530 Subject: [PATCH 1/6] Add LongestCommonPrefix.java --- .../strings/LongestCommonPrefix.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/com/thealgorithms/strings/LongestCommonPrefix.java diff --git a/src/main/java/com/thealgorithms/strings/LongestCommonPrefix.java b/src/main/java/com/thealgorithms/strings/LongestCommonPrefix.java new file mode 100644 index 000000000000..bb1e673fcdbd --- /dev/null +++ b/src/main/java/com/thealgorithms/strings/LongestCommonPrefix.java @@ -0,0 +1,17 @@ +package com.thealgorithms.strings; + +public final class LongestCommonPrefix { + public String longestCommonPrefix(String[] strs) { + if(strs == null || strs.length == 0) return ""; + + Arrays.sort(strs); + String shortest = strs[0]; + String longest = strs[strs.length - 1]; + + int index = 0; + while(index < shortest.length() && index < longest.length() && shortest.charAt(index) == longest.charAt(index)) + index++; + + return shortest.substring(0, index); + } +} From 5dbe20b9055de93320f122e6af6cac5c8e6ba873 Mon Sep 17 00:00:00 2001 From: "Ramit Gangwar (NoiR)" <54339318+TheDarkW3b@users.noreply.github.com> Date: Tue, 15 Oct 2024 22:01:50 +0530 Subject: [PATCH 2/6] Update LongestCommonPrefix.java --- .../java/com/thealgorithms/strings/LongestCommonPrefix.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/thealgorithms/strings/LongestCommonPrefix.java b/src/main/java/com/thealgorithms/strings/LongestCommonPrefix.java index bb1e673fcdbd..d7766466c330 100644 --- a/src/main/java/com/thealgorithms/strings/LongestCommonPrefix.java +++ b/src/main/java/com/thealgorithms/strings/LongestCommonPrefix.java @@ -1,5 +1,7 @@ package com.thealgorithms.strings; +import java.util.Arrays; + public final class LongestCommonPrefix { public String longestCommonPrefix(String[] strs) { if(strs == null || strs.length == 0) return ""; From 356c073bf0603d0efb34e6fe7d8f230917d797da Mon Sep 17 00:00:00 2001 From: "Ramit Gangwar (NoiR)" <54339318+TheDarkW3b@users.noreply.github.com> Date: Wed, 16 Oct 2024 22:03:23 +0530 Subject: [PATCH 3/6] Create LongestCommonPrefixTest.java --- .../strings/LongestCommonPrefixTest.java | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/test/java/com/thealgorithms/strings/LongestCommonPrefixTest.java diff --git a/src/test/java/com/thealgorithms/strings/LongestCommonPrefixTest.java b/src/test/java/com/thealgorithms/strings/LongestCommonPrefixTest.java new file mode 100644 index 000000000000..0a9a33ac6851 --- /dev/null +++ b/src/test/java/com/thealgorithms/strings/LongestCommonPrefixTest.java @@ -0,0 +1,72 @@ +package com.thealgorithms.strings; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class LongestCommonPrefixTest { + + private final LongestCommonPrefix longestCommonPrefix = new LongestCommonPrefix(); + + @Test + public void testCommonPrefix() { + String[] input = {"flower", "flow", "flight"}; + String expected = "fl"; + assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input)); + } + + @Test + public void testNoCommonPrefix() { + String[] input = {"dog", "racecar", "car"}; + String expected = ""; + assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input)); + } + + @Test + public void testEmptyArray() { + String[] input = {}; + String expected = ""; + assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input)); + } + + @Test + public void testNullArray() { + String[] input = null; + String expected = ""; + assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input)); + } + + @Test + public void testSingleString() { + String[] input = {"single"}; + String expected = "single"; + assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input)); + } + + @Test + public void testCommonPrefixWithDifferentLengths() { + String[] input = {"ab", "a"}; + String expected = "a"; + assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input)); + } + + @Test + public void testAllSameStrings() { + String[] input = {"test", "test", "test"}; + String expected = "test"; + assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input)); + } + + @Test + public void testPrefixAtEnd() { + String[] input = {"abcde", "abcfgh", "abcmnop"}; + String expected = "abc"; + assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input)); + } + + @Test + public void testMixedCase() { + String[] input = {"Flower", "flow", "flight"}; + String expected = ""; + assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input)); + } +} From 57a8c3056704fd325f706944475c2607d62cab55 Mon Sep 17 00:00:00 2001 From: "Ramit Gangwar (NoiR)" <54339318+TheDarkW3b@users.noreply.github.com> Date: Wed, 16 Oct 2024 22:07:20 +0530 Subject: [PATCH 4/6] Update DIRECTORY.md --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index e511ab40b329..06dd8ae95b0d 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -645,6 +645,7 @@ * [Isomorphic](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Isomorphic.java) * [KMP](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/KMP.java) * [LetterCombinationsOfPhoneNumber](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/LetterCombinationsOfPhoneNumber.java) + * [LongestCommonPrefix](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/LongestCommonPrefix.java) * [LongestNonRepetitiveSubstring](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/LongestNonRepetitiveSubstring.java) * [LongestPalindromicSubstring](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/LongestPalindromicSubstring.java) * [Lower](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Lower.java) @@ -1210,6 +1211,7 @@ * [HorspoolSearchTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/HorspoolSearchTest.java) * [IsomorphicTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/IsomorphicTest.java) * [LetterCombinationsOfPhoneNumberTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/LetterCombinationsOfPhoneNumberTest.java) + * [LongestCommonPrefixTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/LongestCommonPrefixTest.java) * [LongestNonRepetitiveSubstringTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/LongestNonRepetitiveSubstringTest.java) * [LongestPalindromicSubstringTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/LongestPalindromicSubstringTest.java) * [LowerTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/LowerTest.java) From 504b8c83b9369ffd6aad777c90e7f8fc7e16d421 Mon Sep 17 00:00:00 2001 From: "Ramit Gangwar (NoiR)" <54339318+TheDarkW3b@users.noreply.github.com> Date: Wed, 16 Oct 2024 22:10:17 +0530 Subject: [PATCH 5/6] Update LongestCommonPrefix.java Fixed formatting --- .../com/thealgorithms/strings/LongestCommonPrefix.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/thealgorithms/strings/LongestCommonPrefix.java b/src/main/java/com/thealgorithms/strings/LongestCommonPrefix.java index d7766466c330..0fabdaa2658b 100644 --- a/src/main/java/com/thealgorithms/strings/LongestCommonPrefix.java +++ b/src/main/java/com/thealgorithms/strings/LongestCommonPrefix.java @@ -4,15 +4,18 @@ public final class LongestCommonPrefix { public String longestCommonPrefix(String[] strs) { - if(strs == null || strs.length == 0) return ""; + if (strs == null || strs.length == 0) { + return ""; + } Arrays.sort(strs); String shortest = strs[0]; String longest = strs[strs.length - 1]; int index = 0; - while(index < shortest.length() && index < longest.length() && shortest.charAt(index) == longest.charAt(index)) + while (index < shortest.length() && index < longest.length() && shortest.charAt(index) == longest.charAt(index)) { index++; + } return shortest.substring(0, index); } From bff1ce1715f8fe290da6f02c8accd46795626357 Mon Sep 17 00:00:00 2001 From: "Ramit Gangwar (NoiR)" <54339318+TheDarkW3b@users.noreply.github.com> Date: Sat, 19 Oct 2024 10:33:36 +0530 Subject: [PATCH 6/6] Update LongestCommonPrefixTest.java --- .../com/thealgorithms/strings/LongestCommonPrefixTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/strings/LongestCommonPrefixTest.java b/src/test/java/com/thealgorithms/strings/LongestCommonPrefixTest.java index 0a9a33ac6851..580a2726d285 100644 --- a/src/test/java/com/thealgorithms/strings/LongestCommonPrefixTest.java +++ b/src/test/java/com/thealgorithms/strings/LongestCommonPrefixTest.java @@ -1,8 +1,9 @@ package com.thealgorithms.strings; -import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; + public class LongestCommonPrefixTest { private final LongestCommonPrefix longestCommonPrefix = new LongestCommonPrefix();