Write a function to find the longest common prefix string amongst an array of strings.
每次比较保存可能的最长相同前缀
public class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length==0) return "";
StringBuilder sb = new StringBuilder(strs[0]);
for(int i=1; i<strs.length; i++){
StringBuilder pre = sb;
sb = new StringBuilder();
for(int j=0; j<Math.min(strs[i].length(), pre.length()); j++){
if(strs[i].charAt(j) != pre.charAt(j)) break;
sb.append(pre.charAt(j));
}
}
return sb.toString();
}
}
和上面做法类似但是更简略的方法,用indexOf实现匹配
public String longestCommonPrefix(String[] strs) {
if(strs == null || strs.length == 0) return "";
String pre = strs[0];
int i = 1;
while(i < strs.length){
while(strs[i].indexOf(pre) != 0)
pre = pre.substring(0,pre.length()-1);
i++;
}
return pre;
}
更巧妙的方法是对数组排序然后直接比较前后两个字符串
public String longestCommonPrefix(String[] strs) {
StringBuilder result = new StringBuilder();
if (strs!= null && strs.length > 0){
Arrays.sort(strs);
char [] a = strs[0].toCharArray();
char [] b = strs[strs.length-1].toCharArray();
for (int i = 0; i < a.length; i ++){
if (b.length > i && b[i] == a[i]){
result.append(b[i]);
}
else {
return result.toString();
}
}
return result.toString();
}