Skip to content

Commit 3da16a7

Browse files
authored
Add LongestCommonPrefix (TheAlgorithms#5849)
1 parent 84522ba commit 3da16a7

File tree

3 files changed

+97
-0
lines changed

3 files changed

+97
-0
lines changed

DIRECTORY.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,7 @@
686686
* [Isomorphic](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Isomorphic.java)
687687
* [KMP](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/KMP.java)
688688
* [LetterCombinationsOfPhoneNumber](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/LetterCombinationsOfPhoneNumber.java)
689+
* [LongestCommonPrefix](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/LongestCommonPrefix.java)
689690
* [LongestNonRepetitiveSubstring](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/LongestNonRepetitiveSubstring.java)
690691
* [LongestPalindromicSubstring](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/LongestPalindromicSubstring.java)
691692
* [Lower](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Lower.java)
@@ -1311,6 +1312,7 @@
13111312
* [HorspoolSearchTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/HorspoolSearchTest.java)
13121313
* [IsomorphicTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/IsomorphicTest.java)
13131314
* [LetterCombinationsOfPhoneNumberTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/LetterCombinationsOfPhoneNumberTest.java)
1315+
* [LongestCommonPrefixTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/LongestCommonPrefixTest.java)
13141316
* [LongestNonRepetitiveSubstringTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/LongestNonRepetitiveSubstringTest.java)
13151317
* [LongestPalindromicSubstringTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/LongestPalindromicSubstringTest.java)
13161318
* [LowerTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/LowerTest.java)
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.thealgorithms.strings;
2+
3+
import java.util.Arrays;
4+
5+
public final class LongestCommonPrefix {
6+
public String longestCommonPrefix(String[] strs) {
7+
if (strs == null || strs.length == 0) {
8+
return "";
9+
}
10+
11+
Arrays.sort(strs);
12+
String shortest = strs[0];
13+
String longest = strs[strs.length - 1];
14+
15+
int index = 0;
16+
while (index < shortest.length() && index < longest.length() && shortest.charAt(index) == longest.charAt(index)) {
17+
index++;
18+
}
19+
20+
return shortest.substring(0, index);
21+
}
22+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.thealgorithms.strings;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import org.junit.jupiter.api.Test;
6+
7+
public class LongestCommonPrefixTest {
8+
9+
private final LongestCommonPrefix longestCommonPrefix = new LongestCommonPrefix();
10+
11+
@Test
12+
public void testCommonPrefix() {
13+
String[] input = {"flower", "flow", "flight"};
14+
String expected = "fl";
15+
assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input));
16+
}
17+
18+
@Test
19+
public void testNoCommonPrefix() {
20+
String[] input = {"dog", "racecar", "car"};
21+
String expected = "";
22+
assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input));
23+
}
24+
25+
@Test
26+
public void testEmptyArray() {
27+
String[] input = {};
28+
String expected = "";
29+
assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input));
30+
}
31+
32+
@Test
33+
public void testNullArray() {
34+
String[] input = null;
35+
String expected = "";
36+
assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input));
37+
}
38+
39+
@Test
40+
public void testSingleString() {
41+
String[] input = {"single"};
42+
String expected = "single";
43+
assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input));
44+
}
45+
46+
@Test
47+
public void testCommonPrefixWithDifferentLengths() {
48+
String[] input = {"ab", "a"};
49+
String expected = "a";
50+
assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input));
51+
}
52+
53+
@Test
54+
public void testAllSameStrings() {
55+
String[] input = {"test", "test", "test"};
56+
String expected = "test";
57+
assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input));
58+
}
59+
60+
@Test
61+
public void testPrefixAtEnd() {
62+
String[] input = {"abcde", "abcfgh", "abcmnop"};
63+
String expected = "abc";
64+
assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input));
65+
}
66+
67+
@Test
68+
public void testMixedCase() {
69+
String[] input = {"Flower", "flow", "flight"};
70+
String expected = "";
71+
assertEquals(expected, longestCommonPrefix.longestCommonPrefix(input));
72+
}
73+
}

0 commit comments

Comments
 (0)