编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"] 输出: "fl"
示例 2:
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if (strs.empty()) {//直接排除特殊情况:字符串为空
return "";
}
else if (strs.size() == 1){//只有一个字符,当然就是它了
return strs[0];
}
//寻找最短的str
int minLength = 131;
for (vector<string>::iterator iter = strs.begin(); iter != strs.end(); ++iter) {//O(n)
if (iter->size() < minLength) {
minLength = (int)iter->size();
}
}
string prefix;
for (int i = 0; i < minLength; ++i) //遍历考察一个字符中的所有元素
{
prefix.push_back(strs[1][i]);//将strs[0][i]的元素加在prefix最后
for (vector<string>::iterator iter = strs.begin(); iter != strs.end(); ++iter)//遍历各个字符
{
if (prefix.back() != (*iter)[i]) //若有不同的元素
{
prefix.pop_back();//删除最后一个元素
return prefix;
}
}
}
return prefix;
}
};