class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string s="";
int l=200;
for(int x=0;x<strs.size()-1;x++)
{
if(strs.at(x).length()<=strs.at(x+1).length()&&strs.at(x).length()<=l)
{
l=strs.at(x).length();
}
else if(strs.at(x+1).length()<=l)
{
l=strs.at(x+1).length();
}
}
if(strs.size()==1)
{
s=s+strs.at(0);
return s;
}
for(int j=0;j<l;j++)
{
for (int i=0;i<strs.size()-1;i++)
{
if(strs.at(i)[j]==strs.at(i+1)[j])
{
if(i==strs.size()-2)
{
s+=strs.at(i)[j];
}
}
else
{
i=strs.size()-1;
j=l;
}
}
}
return s;
}
};
果然代码是要自己动手才行,思路很清晰,但仍然花了大量时间DEBUG,没有借鉴别人的思路,代码的效率确实不高。
这就去学习别人的思路!
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string s="";
int l=200;
for(int x=0;x<strs.size()-1;x++)
{
l=min(l,(int)strs[x].length());
}
if(strs.size()==1)
{
s=s+strs[0];
return s;
}
for(int j=0;j<l;j++)
{
for (int i=0;i<strs.size()-1;i++)
{
if(strs[i][j]==strs[i+1][j])
{
if(i==strs.size()-2)
{
s+=strs[i][j];
}
}
else
{
i=200;
j=200;
}
}
}
return s;
}
};
思路基本不变,改动了几处代码使得代码更精简。
class Solution {
public:
string longestCommonPrefix(vector<string>& str) {
sort(str.begin(),str.end());
string &s1=str.front();
string &s2=str.back();
int i=0;
while(i<s1.size()&&i<s2.size()&&s1[i]==s2[i]){
++i;
}
return string(s1.begin(),s1.begin()+i);
}
};
学习别人的思路,很巧妙的用法,先将字符串排序,再比较最小跟最大的字符串即可。