水平扫描:依次取每个str的第i个字符,若相同,则公共子串+1,否则结束。
public static String longestCommonPrefix(String[] strs) {
int strNum = strs.length;
if(strNum==1) return strs[0];
int minLen = Integer.MAX_VALUE;
for(int i=0;i<strs.length;i++)
minLen=Math.min(minLen,strs[i].length());
StringBuilder res = new StringBuilder("");
for(int i=0;i<minLen;i++){
boolean flag=true;
char c = strs[0].charAt(i);
for(int j=1;j<strNum;j++){
if(strs[j].charAt(i)!=c){
flag=false;
break;
}
}
if(flag){
res.append(c);
}else{
break;
}
}
return res.toString();
}
JAVA有个类库,可以直接在一个字符串中,找到另一个字符串 indexOf() ,这样的我们依次取最大子串就可以:
LCP(S1…Sn)=LCP(LCP(LCP(S1,S2),S3),…Sn)
所以我们可以这样:
public String longestCommonPrefix(String[] strs) {
if (strs.length == 0) return "";
String prefix = strs[0];
for (int i = 1; i < strs.length; i++)
while (strs[i].indexOf(prefix) != 0) {
prefix = prefix.substring(0, prefix.length() - 1);
if (prefix.isEmpty()) return "";
}
return prefix;
}
来源:oschina
链接:https://my.oschina.net/u/4393165/blog/3219198