【发布时间】:2020-11-25 06:45:26
【问题描述】:
输入:
babad
abbd
输出:
ad
bb
预期:
bab
bb
代码:
#include<iostream>
using namespace std;
class Solution {
public:
string longestPalindrome(string s) {
int maxlength=1;
bool ispalindromic[1000][1000]={false};
for(int i=0;i<s.length();i++)
ispalindromic[i][i]=1;
for(int l=2;l<s.length();l++){
for(int i=0;i<s.length()-1; i++){
int j=i+l-1;
if(l==2&&s[i]==s[j]){
ispalindromic[i][j]=1;
maxlength=max(maxlength,j-i+1);
continue;}
if(ispalindromic[i+1][j-1]&&s[i]==s[j]){
ispalindromic[i][j]=1;
maxlength=max(maxlength,j-i+1);
}
}}
for(int i=0;i<s.length();i++){
int j=i+maxlength-1;
if(ispalindromic[i][j]){
return s.substr(i,j);
}
}
return s.substr(0,1);
}
};
我首先创建了ispalindromic[1000][1000],并确保每个字母本身都是回文。然后我从 2 的长度开始检查回文,依此类推。每当ispalindromic 变为真时,代码就会更新maxlength,这样最后代码就可以简单地使用maxlength 打印最长的回文。
【问题讨论】:
-
这里有点离题,应该在codereview 上提问。如果您希望有人通过查看您的代码来搜索逻辑错误,那么它的格式应该是合理的。
-
您似乎从未考虑过整个字符串可能是回文,请尝试使用
rotor进行测试
标签: c++ algorithm debugging dynamic-programming palindrome