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;
};
力扣的题,但是它说我内存溢出了,哪溢出了?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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 ""; }
解决 无用评论 打赏 举报
悬赏问题
- ¥15 这个如何解决详细步骤
- ¥15 在微信h5支付申请中,别人给钱就能用我的软件,这个的所属行业是啥?
- ¥30 靶向捕获探针设计软件包
- ¥15 别人给钱就能用我的软件,这个的经营场景是啥?
- ¥15 react-diff-viewer组件,如何解决数据量过大卡顿问题
- ¥20 遥感植被物候指数空间分布图制作
- ¥15 安装了xlrd库但是import不了…
- ¥20 Github上传代码没有contribution和activity记录
- ¥20 SNETCracker
- ¥15 数学建模大赛交通流量控制