Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string “”.
Example 1:
Input: [“flower”,“flow”,“flight”]
Output: “fl”
Example 2:
Input: [“dog”,“racecar”,“car”]
Output: “”
Explanation: There is no common prefix among the input strings.
Note:
All given inputs are in lowercase letters a-z.
求最长公共前缀
解法一:
暴力法
先找到所有字符串最短的长度
然后逐个长度比较所有子字符串,若碰到不等的子字符串,则直接返回
string longestCommonPrefix(vector<string>& strs) {
string res = "";
int min_len = 0;
for (int i = 0; i<strs.size(); i++)
{
if (min_len<strs[i].size())
min_len = strs[i].size();
}
int i;
for (i = 1; i<=min_len; i++)
{
bool flag = true;
for (int j = 0; j<(strs.size()-1)&&flag; j++)
{
//cout <<j<< strs[j].substr(0, i) << "," << strs[j + 1].substr(0, i)<<endl;
if (strs[j].substr(0, i) != strs[j + 1].substr(0, i)) flag = false;
//cout << flag << (j < (strs.size() - 1) && flag) << endl;
}
if (!flag) return strs[0].substr(0, i-1);
}
return strs[0].substr(0, min_len);
}
解法二:
两两字符串比较得出公共部分,依次比较下去得出最后的公共部分。
string longestCommonPrefix(vector<string>& strs) {
string res = "";
int min_len = 0;
for (int i = 0; i<strs.size(); i++)
{
if (min_len<strs[i].size())
min_len = strs[i].size();
}
string share = strs[0];
for (auto str : strs)
{
int m = share.size();
int n = str.size();
int i = 0, j = 0;
while (i<m&&j<n&&share[i]==str[j])
{
i++;
j++;
}
if (i == 0) return "";
share = share.substr(0, i);
}
return share;
}