如何解决最长回文子串缺少边缘情况
这是我使用动态编程概念编写的代码。
bool ispalin(string s)
{
string s1=s;
reverse(s.begin(),s.end());
if(s1.compare(s)==0)
return true;
return false;
}
string longestPalindrome(string s) {
int n = s.length();
if(n==1)
return s;
vector<vector<int>> dp(n,vector<int>(n,0));
pair<int,int>coor;
for(int i =0;i<n;i++)
{
dp[i][i]=1;
coor=make_pair(i,i);
}
for(int i=0;i<n;i++)
{
int j=i+1;
if(j<n)
{
if(ispalin(s.substr(i,j)))
{
dp[i][j]=1;
coor=make_pair(i,j);
}
else
{
dp[i][j]=0;
}
}
}
for(int i=0;i<n;i++)
{
for(int j=2;j<n;j++)
{
if(i<j)
{
if(s[i]==s[j] && dp[i+1][j-1]==1)
{
dp[i][j]=1;
coor=make_pair(i,j);
}
else
dp[i][j]=0;
}
}
}
return s.substr(coor.first,coor.second);
}
我试图做的是
- 第一个for循环是填充对角线元素。
- for循环用于填充长度为2的元素,即-我检查该子字符串是否是回文,如果是,则将其设为1,否则为0。
- 每当我将一个单元格更新为1时,我都会将
coor
对存储到这些坐标,以便它们始终具有更新1的最新值。
在大小写为“ bb”,“ ccc”的情况下不起作用,如何在代码中丢失此大小写?
解决方法
您使用 substr 功能的方式不正确。第一个参数应为起始索引,第二个参数应为字符串的长度。
该字符串以及“ abccbdf”的代码也必须失败。
更改
if(ispalin(s.substr(i,j)))
对此
if(ispalin(s.substr(i,2)))
并且,在最后一个return语句中,您的“ coor”具有正确的值,但是“ substr”第二个参数不正确。 改为使用以下语句:
return s.substr(coor.first,coor.second-coor.first+1);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。