一开始想到的方法是竖向搜索:先以第一个字母为例,搜索后面所有的字符串的第一个字符是否符合,符合的话,就继续搜索第二个字母.不符合就返回.
用这个方法的话还是有一些比较麻烦的条件判断,写起来有些烦.
public String longestCommonPrefix(String[] strs) {
if(strs.length==0)return "";
String res = "", temp = "";
int i = 0;
Boolean flag=false;
while (true) {
if(strs[0].length()==0)return res;
if(strs[0].length()-1!=i){
temp = strs[0].substring(0, i + 1);}
else
temp = strs[0];
for (int t = 1; t < strs.length; t++) {
if(strs[t].length()==0)return "";
if(strs[t].length()==i){
flag=true;
if(!strs[t].equals(temp))return res;
}
else if(!strs[t].substring(0, i + 1).equals(temp)) {
return res;
}
}
res = temp;
i++;
if (flag)return temp;
}
后面看到题解,意识到了横向搜索的方法.即假设第一个就是最长的.然后拿第二个来比较,找到与第二个的公共子缀,再去与第三个比较.中间如果有空的情况直接返回空值.使用这个方法,写起来舒服很多.
public String longestCommonPrefix(String[] strs) {
if (strs.length==0)return "";
if (strs.length==1)return strs[0];
String res = strs[0];
for (String s:strs){
if (res.equals(""))return "";
int j=0;
for(int i=0;i<Math.min(res.length(),s.length());i++){
if(res.charAt(i)==s.charAt(i))j++;
else break;
}
if(j==0)return "";
if(j<res.length())res=res.substring(0,j);
}
return res;
}