level 3
习题(12-6) 回文子串
描述
给定一个字符串,输出所有回文子串。
回文子串即从左往右输出和从右往左输出结果是一样的字符串
比如: abba cccdeedccc都是回文字符串
我们要查找的子串长度应该大于等于2
关于输入
输入是一行,即可一个字符串。长度500以内
比如:
abcddcbaab
关于输出
输出所有的回文子串,一个满足条件的子串一行。
子串长度小的优先输出,出现在原始字符串靠左的子串优先输出。
比如对于abcddcbaab
输出:
dd
aa
cddc
baab
bcddcb
abcddcba
2011年11月13日 10点11分
1
level 10
#include <iostream>
#include <string>
using namespace std;
int main()
{string xij(string x,int i,int m);//函数xij声明
string xijr(string x,int i,int m);//函数xijr声明
string x,y,z;
cin>>x;//假设x是从键盘上输入,如果通过其它途径,更改这行
int i,j,n;
n=x.length();
for(i=0;i<=n-2;i++)
{for(j=1;j<=(n-i)/2;j++)
if(xij(x,i,j)==xijr(x,i+j,j))
cout<<xij(x,i,j)<<xij(x,i+j,j)<<endl;//实现输出
}
return 0;
}//主函数结束
string xij(string x,int i,int m)//函数xij返回x的从x[i]开始,长度为m的子字符串
{string y;
int k;
for(k=0;k<=m-1;k++)
y.push_back(x[i+k]);
return y;
}
string xijr(string x,int i,int m)//函数xijr返回x的从x[i]开始,长度为m的子字符串的倒序排列
{string y;
int k;
for(k=0;k<=m-1;k++)
y.push_back(x[i+m-1-k]);
return y;
}
2011年11月14日 04点11分
3
level 12
设f[i][j]表示字符串s从i到j是否为回文串…若s[i]等于s[j]且f[i+1][j-1]为真…代表i到j为回文串…输出…第一层循环是i,j的差。
2011年11月14日 14点11分
14
level 12
楼主…咱爪机很辛苦的…偶时间复杂度比他们的低!平方级的…不要被带坏了…不要暴搜!
2011年11月14日 14点11分
15
level 10
我的时间复杂度也是N^2级别的,你看我用的循环
for(i=0;i<=n-2;i++)
{for(j=1;j<=(n-i)/2;j++)
2011年11月15日 10点11分
17
level 3
不得不说时隔这么久我才上贴吧看到你们的回复实在是对大家感激涕零...我基本不用贴吧的请见谅哈...多谢多谢
2013年02月23日 06点02分
20