题目:
方法一:
LCP(string1, string2, string3)
= LCP (LCP (string1, string2), string3)
Ex:
LCP (“geeksforgeeks”, “geeks”, “geek”)
= LCP (LCP (“geeksforgeeks”, “geeks”), “geek”)
= LCP (“geeks”, “geek”) = “geek”
我们通过求得前两个的公共前缀,再将其和数组后面的字符串进行比较。如图所示,
public String longestCommonPrefix(String[] strs) {
if(strs.length==0)
return "";
String res=strs[0];
for (int i = 1; i < strs.length; i++) {
res=commonPrefix(res, strs[i]);
}
return res;
}
public String commonPrefix(String s1,String s2)
{
String res="";
int len=((s1.length()>=s2.length())?s2.length():s1.length());
for (int i = 0; i <len; i++) {
//如果检测到不相等的则退出for循环。
if(s1.charAt(i)!=s2.charAt(i))
break;
res=res+s1.charAt(i);
//如果监测不到, 不会跳出for循环,而会继续往下检测,这是错误的
// if(s1.charAt(i)==s2.charAt(i))
// res=res+s1.charAt(i);
}
return res;
}
方法二:
1.将字符串数组进行排序
2.寻找数组的公共前缀就是找第一个元素和最后一个元素的最长公共前缀
代码实现:
public String longestCommonPrefix(String[] strs){
if(strs.length==0)
return "";
Arrays.sort(strs);
String ans=commonPrefix(strs[0], strs[strs.length-1]);
return ans;
}
public String commonPrefix(String s1,String s2)
{
String res="";
int len=((s1.length()>=s2.length())?s2.length():s1.length());
for (int i = 0; i <len; i++) {
if(s1.charAt(i)!=s2.charAt(i))
break;
res=res+s1.charAt(i);
}
return res;
}