1.我的暴力解法:
class Solution {
public static int shortestLen=0;
public String longestCommonPrefix(String[] strs) {
int min_length=getShortestStr(strs);
String res="";
int i=0,j=1;
for (;i<min_length;i++){
char ch=strs[0].charAt(i);
boolean flag=true;
j=1;
if(min_length==1){
for (;j<strs.length;j++){
if(strs[j].charAt(0)!=strs[0].charAt(0)){
return "";
}
}
return ""+strs[0].charAt(0);
}
else{
for (;j<strs.length;++j){
if(ch!=strs[j].charAt(i)){
return res;
}
}
if(flag==true){
res+=(ch);
}
}
}
return res;
}
public int getShortestStr(String[] str){
int res=999;
if(str==null){
return -1;
}
int i=0;
while(i<str.length){
if(str[i].length()<res){
res=str[i].length();
}
i++;
}
return res;
}
}
2.大佬解法
直接字符串排序,假设strs长度为n,则时间需要O(max(nlogn),shortest_str_len),一般也就是nlogn水平
CPP解法
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.empty())
return string();
sort(strs.begin(), strs.end());
string st = strs.front(), en = strs.back();
int i, num = st.size();
for(i = 0; i < num && st[i] == en[i]; i ++)
;
return string(st, 0, i);
}
};