BL算法
public String longestCommonPrefix(String[] strs) {
int i;
for(i = 0;i < strs[0].length() ;i++) //取第一个字符串长度
for(int j= 0 ;j < strs.length;j++ )
{
if(!strs[j].startsWith(strs[0].substring(0,i+1))) //如果字符不以以strs[0].substring(0,i+1)为前缀
return strs[0].substring(0,i);
}
return strs[0].substring(0,i);
}
排序
public String longestCommonPrefix(String[] strs) {
Arrays.sort(strs, (o1,o2) -> (o1 + o2).compareTo((o2 + o1))==0 ? (o1.length() < o2.length() ? -1 : 1) : (o1 + o2).compareTo((o2 + o1)));
int i;
for( i = 0;i < strs[0].length() ;i++)//取第一个字符串长度
{
String tmp = strs[strs.length-1];
if(!tmp.startsWith(strs[0].substring(0,i+1))) //如果字符不以strs[0].substring(0,i+1)为前缀
return strs[0].substring(0,i);
}
return strs[0].substring(0,i);
}
最优解:用tmp存储最长前缀,开始时tmp存储第一个字符串,随后用tmp与后面字符串比较找出最长前缀赋予tmp,直到最后一个字符串。
public String longestCommonPrefix(String[] strs) {
String temp=strs[0];
for(int i=1;i<strs.length;i++){
temp=sel(temp,strs[i]);
}
return temp;
}
public String sel(String s1,String s2){
int i;
for(i=0;i<Math.min(s1.length(),s2.length());i++){
if(s1.charAt(i)!=s2.charAt(i))break;
}
return s1.substring(0,i);
}