- 讨论区里的:
//Sort the array first, and then you can simply compare the first and last elements in the sorted array.
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();
}
想想实际上就利用了字符串排序的规则。相同的前缀比较完了之后比较不同的。所以有相同前缀的肯定是在一起的。
能想到这种算法真的好有意思啊!!
- 我的直接粗暴思路:
string longestCommonPrefix(vector<string>& strs) {
if (strs.size()==0){
return "";
}
for(int i=0;i<strs[0].size();i++){
string s0=strs[0].substr(i,1);
for(int j=0;j<strs.size();j++){
if(strs[j].substr(i,1)!=s0||strs[j].size()==i)
return strs[0].substr(0,i);
}
}
return strs[0];
}
一个个字母比较过去。
不知道排序的算法是怎样的,应该时间复杂度差不多我觉着。
- 最后Java中有indexOf的函数。
public String longestCommonPrefix(String[] strs) {
if (strs.length == 0) return "";
String pre = strs[0];
for (int i = 1; i < strs.length; i++)
while(strs[i].indexOf(pre) != 0)
pre = pre.substring(0,pre.length()-1);
return pre;
}