忘川睡着了zZ 2023-04-10 17:59 采纳率: 66.7%
浏览 22
已结题

力扣的题,但是它说我内存溢出了,哪溢出了?


string longestPalindrome(string str){
    int *str_len=new int[str.size()];
    int *index=new int[str.size()];
    for(int i = 0;i < str.size();i++) {
        str_len[i]=i>0&&str[i]==str[i-1]?str_len[i-1]+1:1;
        index[str_len[i]]=i-str_len[i]+1;
        if(i-str_len[i-1]-1>=0)
        {
            str_len[i]=str[i]==str[i-str_len[i-1]-1]?str_len[i-1]+2:str_len[i];
            index[str_len[i]]=i-str_len[i]+1;
        }
    }
    int res=0;
    for(int i = 0;i <str.size();i++) {
        res=max(res,str_len[i]);
    }
    string s(res,' ');
    for(int i=0;i<res;i++){
        s[i]=str[index[res]++];
    }
    delete[] index;
    delete[] str_len;
    return s;
};
  • 写回答

3条回答 默认 最新

  • threenewbee 2023-04-10 18:07
    关注

    不能简单地将 index[str_len[i]]=i-str_len[i]+1; 覆盖之前存储在 index 数组中的值
    你需要将这些值存储在一个链表中,以便在最后构造最长回文子串时正确地找到对应的起始下标。

    
    string longestPalindrome(string str) {
        int *str_len = new int[str.size()];
        vector<int> *index = new vector<int>[str.size()];
    
        for (int i = 0; i < str.size(); i++) {
            str_len[i] = i > 0 && str[i] == str[i - 1] ? str_len[i - 1] + 1 : 1;
    
            index[str_len[i]].push_back(i - str_len[i] + 1);
    
            if (i - str_len[i - 1] - 1 >= 0) {
                str_len[i] = str[i] == str[i - str_len[i - 1] - 1] ? str_len[i - 1] + 2 : str_len[i];
                index[str_len[i]].push_back(i - str_len[i] + 1);
            }
        }
    
        int res = 0;
        for (int i = 0; i < str.size(); i++) {
            res = max(res, str_len[i]);
        }
    
        string s(res, ' ');
    
        for (int i = 0; i < index[res].size(); i++) {
            for (int j = 0; j < res; j++) {
                s[j] = str[index[res][i] + j];
            }
    
            if (s == string(s.rbegin(), s.rend())) {
                delete[] index;
                delete[] str_len;
                return s;
            }
        }
    
        delete[] index;
        delete[] str_len;
        return "";
    }
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月10日
  • 创建了问题 4月10日

悬赏问题

  • ¥15 这个如何解决详细步骤
  • ¥15 在微信h5支付申请中,别人给钱就能用我的软件,这个的所属行业是啥?
  • ¥30 靶向捕获探针设计软件包
  • ¥15 别人给钱就能用我的软件,这个的经营场景是啥?
  • ¥15 react-diff-viewer组件,如何解决数据量过大卡顿问题
  • ¥20 遥感植被物候指数空间分布图制作
  • ¥15 安装了xlrd库但是import不了…
  • ¥20 Github上传代码没有contribution和activity记录
  • ¥20 SNETCracker
  • ¥15 数学建模大赛交通流量控制