查找字符串数组中的最长公共前缀

题目是:编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。

我的解决思路是
先用变量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ᴼᴾᴱᴺᴬᴵ
在你的代码中,有几个问题:

  1. 函数返回类型应该是字符串类型,而不是整型0。
  2. 当出现不匹配的情况时,应该立即返回公共前缀,而不是输出当前已经找到的公共前缀并继续循环。
  3. 在第二个循环内,每次循环结束后,计数器c应该被重置为0,以确保正确计算每个字符的匹配情况。

-
以下是修改后的代码:

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输出当前找到的公共前缀并继续循环。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^