一.问题描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:" "
解释:输入不存在公共前缀。
二.代码思路
先取第一个字符串作为初始公共前缀,然后依次将这个公共前缀与数组中的每一个字符串进行比较,更新公共前缀。具体来说,使用了一个辅助函数commonPrefix来比较两个字符串的公共前缀。如果在任何时候公共前缀变为空,就提前终止循环。
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if (strs.empty()) return " "; //容器为空返回“ ”
string common_part = strs[0]; //取第一个字符串作为初始公共前缀
for (int i = 1;i < strs.size();i++)
{
common_part = commonPrefix(common_part, strs[i]);
if (common_part == " ") break;
}
return common_part;
}
private:
string commonPrefix(string& a, string& b)
{
int min_length = min(a.size(), b.size());
int i = 0;
while (i < min_length && a[i] == b[i]) i++;
return a.substr(0, i);
}
};