题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
**输入:**strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例 2:
**输入:**strs = [“dog”,“racecar”,“car”]
输出:“”
**解释:**输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成
解题算法
- 先找出最短的字符串,然后进行前缀比较
public:
string longlongestCommonPrefix(vector<string>& strs) {
string shortest = strs[0];//假定最短的字符串是数组的第一个
for(auto i:strs){//遍历一遍,找到最短的字符串
if(i.size()<shortest.size()){
shortest = i;
}
}
//判断最短的字符串是否为空,是空的话,直接返回空
if(shortest != " "){
int a=1;//用来截取第一个字母
string prefix;//用来定义最短字符串前缀
for(; a<=shortest.size();a++){
prefix=shortest.substr(0,a)//从索引0开始截取a个字符
for(auto i:strs){//遍历数组里的每一个字符串
if(i.substr(0,a)!=prefix){//如果不满足,那么前缀是当前的长度-1
return shortest.substr(0,a-1)
}
}
}
return prefix;
}
return "";
}
shortest.substr(0, sz)
表示从索引0开始截取 sz 个字符,即获取最短字符串的前缀。
for(auto i : strs)
循环遍历了字符串向量 strs 中的每个字符串,并使用变量 i 依次表示每个字符串。
- 先两个字符串进行对比,对比出结果之后再和第三个进行对比
if (strs.empty()) {
return "";
}
string prefix = strs[0]; // 初始化前缀为第一个字符串
for (int i = 1; i < strs.size(); ++i) {
while (strs[i].find(prefix) != 0) {//判断字符串 strs[i] 是否以前缀 prefix 开头
// 当前字符串没有以前缀开头,则将前缀缩减一个字符长度
prefix = prefix.substr(0, prefix.length() - 1);
}
}
return prefix;
.find(prefix)
是调用字符串的 find 函数来查找子串 prefix 在字符串 strs[i] 中的位置