【发布时间】:2020-12-04 17:44:18
【问题描述】:
这是我使用动态编程概念编写的代码。
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”我怎么在代码中错过了这个案例?
【问题讨论】:
-
我怎么会在代码中遗漏这个案例?-- How to debug small programs
-
大声感谢@PaulMcKenzie 没有解决我的问题,但明白你的意思我会再试一次
-
是的,使用调试器并查看那些失败的测试用例在代码中采用的路径与您预期的不同。
标签: c++ algorithm dynamic-programming palindrome