我来问道无与说 2023-02-24 23:42 采纳率: 100%
浏览 29
已结题

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

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

我的解决思路是
先用变量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;t<smix;t++){
    for(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<<pub<<std::endl;
    }
    }
    return 0;
    }
    
};

  • 写回答

2条回答 默认 最新

  • MarkHan_ 2023-02-25 08:13
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月5日
  • 已采纳回答 2月25日
  • 创建了问题 2月24日

悬赏问题

  • ¥50 有偿求qftp工具。能连接,下载文件,发送代码,windows环境,最好qt6 要qt creator写的
  • ¥70 刚刚看到一个人的网站居然是通过cname访问的
  • ¥15 Attributeerror:super object has no attribute '__sklearn_tags__'_'
  • ¥15 逆置单链表输出不完整
  • ¥15 宇视vms-B200-A16@R启动不了,如下图所示,在软件工具搜不到,如何解决?(操作系统-linux)
  • ¥500 寻找一名电子工程师完成pcb主板设计(拒绝AI生成式答案)
  • ¥15 关于#mysql#的问题:UNION ALL(相关搜索:sql语句)
  • ¥15 matlab二位可视化能否针对不同数值范围分开分级?
  • ¥15 已经创建了模拟器但是不能用来运行app 怎么办😭自己搞两天了
  • ¥15 关于#极限编程#的问题,请各位专家解答!