我来问道无与说 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日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题