题目是:编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
我的解决思路是
先用变量smix取得最短字符串长度
双重循环 不断将字符压入到一个空字符串中
现在报错:
Line 522: Char 69: runtime error: applying non-zero offset 18446744073709551615 to null pointer (basic_string.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/basic_string.h:531:69
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string pub = "";
int size = strs.size();
int smix = 100;
for(int m = 0;m<size;m++){
if(smix>strs[m].size())
smix = strs[m].size();
}
int c = 0;
int i;
for(int t = 0;tfor(i = 0;i<size-1;i++){
if(strs[i][t]==strs[i+1][t])
c++;
}
if(c==i-1)
pub.push_back(strs[0][t]);
else{
std::cout<return 0;
}
};
该回答引用GPTᴼᴾᴱᴺᴬᴵ
在你的代码中,有几个问题:
-
以下是修改后的代码:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string pub = "";
int size = strs.size();
int smix = 100;
for(int m = 0; m < size; m++) {
if(smix > strs[m].size())
smix = strs[m].size();
}
int i, c;
for(int t = 0; t < smix; t++) {
c = 0;
for(i = 0; i < size-1; i++) {
if(strs[i][t] == strs[i+1][t])
c++;
else
break;
}
if(c == i-1)
pub.push_back(strs[0][t]);
else
return pub;
}
return pub;
}
};
在这个修改后的代码中,我们使用return pub来立即返回公共前缀,而不是使用std::cout输出当前找到的公共前缀并继续循环。
不知道你这个问题是否已经解决, 如果还没有解决的话: