问题
思路
思路不难,和上一道题目不多。反正都是枚举子串。
注意前缀的定义,从首部开始的子串。必须要包含首部。比如abcd,前缀有
ϵ
,a,ab,abc,abcd.
思路就是:所有子串的首部同时开始判断,如果有一个不相等。结束。
代码
/*
前缀只能从首部开始,所以枚举所有子串的首部即可.
*/
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int sz = strs.size();
if(!sz) return "";
// find the min length
int min = strs[0].size();
for( int i = 1; i < sz; ++i )
{
if( strs[i].size() < min )
min = strs[i].size();
}
int ans = 0;
for( int i = 0; i < min; ++i )
{
bool flag = true;
for( int j = 0; j < sz-1; ++j )
{
if( strs[j][i] != strs[j+1][i] )
{
flag = false;
break;
}
}
if(flag)
++ans;
else
break;
}
return std::string( strs[0].begin(), strs[0].begin() + ans ) ;
}
};