14.最长公共子串
日期:2022/7/5
题目描述:编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例:
输入:strs = ["flower","flow","flight"]
输出:"fl"
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
思路:
int i=0;i代表第几个字符,j代表第几个字符串。
用temp代替第一个字符串的第i个字符,看后续的字符串的第i个字符是不是temp,如果不是就结束循环,返回现在的same。
代码+解析:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs[0].size() == 0) return ""; //防止strs = {""}
if(strs.size() == 1) return strs[0]; //防止strs只有一个字符串,后续的while会进入死循环
string same=""; //存储最长公共前缀的字符串
bool end = false; //结束循环的条件
int i=0; //代表第几个字符
while(!end){
char temp = strs[0][i]; //第一个字符串的第i个字符
for(int j=1; j<strs.size(); j++){ //遍历strs
if(strs[j].size()==0) return ""; //感觉这句有点大可不必.....但是懒得思考了
if(strs[j][i] != temp){ //不等于就退出
end = true;
break;
}
if(j==strs.size()-1) same += temp; //如果遍历到最后一个字符串,则存储到same中
if(i == strs[j].size()-1) end = true; //如果遍历到某一个字符串的最后一个字符,就直接退出循环
}
i++;
}
return same;
}
};
学到的总结:
1.无。写了一天好累