编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,”flow”,”flight”]
输出: “fl”
示例 2:
输入: [“dog”,”racecar”,”car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
public class LongestCommonPrefix {
@Test
public void longestCommonPrefixTest() {
Assert.assertEquals("fl", longestCommonPrefix(new String[] {"flower","flow","flight"}));
Assert.assertEquals("", longestCommonPrefix(new String[] {"dog","racecar","car"}));
Assert.assertEquals("", longestCommonPrefix(new String[] {""}));
Assert.assertEquals("a",longestCommonPrefix(new String[] {"a"}));
}
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0 || strs[0].length() == 0) return "";
String first = strs[0];
char flag = first.charAt(0);
String res = "";
int len = first.length();
for (int i = 0; i < len && isSameCharIndexOf(strs, i ,flag); i++) {
res = res + first.charAt(i);
if (i < first.length() - 1 ) {
flag = first.charAt(i+1);
}
}
return res;
}
private boolean isSameCharIndexOf(String[] strs, int i, char flag) {
return Arrays.stream(strs).allMatch(s -> i < s.length() && s.charAt(i) == flag);
}
}