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


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 ' ');
    for(int i=0;i

不能简单地将 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 "";
}

以下内容部分参考ChatGPT模型:


这段代码中可能导致内存溢出的原因是使用了动态内存分配,但没有及时释放。在函数末尾,需要使用delete[]释放str_len和index指向的内存空间。

正确的代码如下:

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;
};

如果我的建议对您有帮助、请点击采纳、祝您生活愉快