题目:
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"] 输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
解题:
依次遍历字符串数组中的每个字符串,将str数组中的第一个元素字符串作为最终初始最终输出的公共前缀字符串finnal结果,并遍历str数组中的其他字符串元素中的每一个字符进行判断,不断更新缩小最终输出的公共前缀字符串finnal。具体代码如下所示:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
//判断strs字符串数组有一个元素,保存至num中
int num = strs.size();
//定义初始最终输出的公共前缀字符串为strs字符串数组中的第一个元素
std::string finnal = strs[0];
int max_finnal = 0;
int sum = 0;
//循环遍历strs字符串数组中的其他元素(字符串)
for(int i=1;i<num;i++){
int n = min(strs[0].size(),strs[i].size());
//定义初始空字符串,作为此时循环的公共前缀字符串
std::string in_finnal = "";
//循环遍历字符串元素中的每个字符,判断是否相同
for(int j=0; j<n; j++){
string a =strs[0];
char b = a[j];
string c = strs[i];
char d = c[j];
//当字符相同时,保存至in_finnal字符串中作为公共前缀字符
if(b==d){
in_finnal.push_back(b);
sum++;
}
//当字符不符合时,直接跳出,尽管后面有的位数有公共字符也不是前缀字符串了
else{
break;
}
}
//将此时对比的一组公共前缀字符串元素与最终输出公共前缀字符串数组进行比较,选取最小的值数值作为所有字符串数组元素中的值
if(finnal.size()>in_finnal.size()){
finnal = in_finnal;
}
}
return finnal;
}
};
特别关注:笔者在编写代码是遇到的小bug是关于字符串数组中字符调用问题,在调用字符串数组中元素的字符时不能连续调用,例如char c = strs[1][2],会产生报错,应拆分调用字符。将前面等式拆分成两个,string a = strs[1]; char c = a[2],不会发生报错。产生bug的问题可能是由于笔者之前使用python编写代码时的陋习,误将数组中元素的元素调用与字符串数组中元素中的字符调用划等号了,在后续C++代码实现时需特殊留意!
标签:finnal,元素,前缀,strs,编程,数组,字符串,最长 From: https://blog.csdn.net/qq_43287713/article/details/144379343