排序,找到长度最短的和第二短的,求解出这两个的最长公共前缀即可。
public String longestCommonPrefix(String[] strs) {
Arrays.sort(strs,new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
return Integer.compare(o1.length(), o2.length());
}
});
String s1 = strs[0];
String s2 = strs[1];
int len = 0;
for(int i=0,j=0;i<s1.length();i++,j++){
if(s1.charAt(i) != s2.charAt(j)){
return "";
}else{
len++;
}
}
return s1.substring(0,len);
}
看到上面就知道,我上面一开始说的思路是错误的。
换个思路:
在排序的基础上,取出该字符串的每一位字符,和每个字符串的每一位compare
public String longestCommonPrefix(String[] strs) {
Arrays.sort(strs,new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
return Integer.compare(o1.length(), o2.length());
}
});
String s1 = strs[0];
int len = 0,flag=0;
for(int i=0;i<s1.length();i++){
for(int j=1;j<strs.length;j++){
if(strs[j].charAt(i) == s1.charAt(i)){
}else{
flag =1;
break;
}
}
if(flag == 1){
break;
}else{
len++;
}
}
return s1.substring(0,len);
}
over!