编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
方法二的时间复杂度值得仔细推敲,https://www.zhihu.com/question/22393997
class Solution {
public String longestCommonPrefix(String[] strs) {
//方法一,列式比较
// int length = strs[0].length();
// StringBuffer temp = new StringBuffer();
// for(int i = 0; i<length; i++){
// for(int j = 1; j<strs.length; j++){
// //这里并没有叠加,而是在strs[0]的长度基础上完成剩余项的判断
// if(i==strs[j].length()||(strs[0].charAt(i)!=strs[j].charAt(i))){
// return strs[0].substring(0, i);
// }
// }
// }
// return strs[0];
// 方法二, 分治时间复杂度也是o(n)
if(strs==null||strs.length==0){
return "";
}
return longestCommonPrefix(strs, 0, strs.length-1);
}
public String longestCommonPrefix(String[] strs, int start, int end){
if(start==end){
return strs[start];
}
int mid = (end+start)/2;
String commString1 = longestCommonPrefix(strs, start, mid);
String commString2 = longestCommonPrefix(strs, mid+1, end);
return commonString(commString1, commString2);
}
public String commonString(String string1, String string2){
int length = Math.min(string1.length(), string2.length());
int i = 0;
StringBuffer temp = new StringBuffer();
while(i<length&&(string1.charAt(i)==string2.charAt(i))){
temp=temp.append(string1.charAt(i));
i++;
}
return temp.toString();
}
}