水平掃描:依次取每個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; }