mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-07-05 16:27:33 +08:00
Add LongestCommonPrefix (#5849)
This commit is contained in:

committed by
GitHub

parent
84522baa92
commit
3da16a7fe0
@ -686,6 +686,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)
|
||||
@ -1311,6 +1312,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)
|
||||
|
@ -0,0 +1,22 @@
|
||||
package com.thealgorithms.strings;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
@ -0,0 +1,73 @@
|
||||
package com.thealgorithms.strings;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
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));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user