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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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