初学C++,作业题遇阻望大牛指教,不胜感激~~
c++吧
全部回复
仅看楼主
level 3
xp1992121 楼主

习题(12-6) 回文子串
描述
给定一个字符串,输出所有回文子串。
回文子串即从左往右输出和从右往左输出结果是一样的字符串
比如: abba cccdeedccc都是回文字符串
我们要查找的子串长度应该大于等于2
关于输入
输入是一行,即可一个字符串。长度500以内
比如:
abcddcbaab
关于输出
输出所有的回文子串,一个满足条件的子串一行。
子串长度小的优先输出,出现在原始字符串靠左的子串优先输出。
比如对于abcddcbaab
输出:
dd
aa
cddc
baab
bcddcb
abcddcba

2011年11月13日 10点11分 1
level 10
蛮力算法的要不?如果需要我明天写,今天要睡觉了
2011年11月13日 14点11分 2
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 10
有个地方我不太明白,“输入是一行,即可一个字符串。长度500以内 ”
string的sizeof长度是32个字节,一共就256位,最多只能存256个字符吧,怎么能到500位呢,求高手指点 [拜]
2011年11月14日 04点11分 4
level 9
[揉脸]不知所云····
2011年11月14日 08点11分 5
level 1
[啊!]这是ACM平台上的作业吧····[拍砖]刚做过一个一模一样的····
2011年11月14日 10点11分 6
level 9
烧饼肿么卖的,多钱一个..
2011年11月14日 10点11分 7
level 1
[揉脸]cin.getline
2011年11月14日 10点11分 8
level 1
[拍砖]突然发现楼主的作业比我们的高端一点···=。=我们只需要回文输出就行了·[揉脸]
2011年11月14日 10点11分 9
level 1
[狂汗] 武大郎烧饼,2元5毛一个,不坑爹
2011年11月14日 10点11分 10
level 10
晕,还要从小到大输出啊 日日日日日日日日
还有getline函数[拍砖],原谅我吧,以前在primer上看过,后来太久不用忘记他的存在了
要不我明天再把输出顺序调整一下吧
2011年11月14日 13点11分 11
level 1
[Kiss]加油··很强大的样子····我太懒了···
2011年11月14日 14点11分 12
level 12
有时限吗?
2011年11月14日 14点11分 13
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
从短到长输出我打算建立一个字符串数组,存储之前挑出来的字符串,然后按照长度递增排序,然后输出,这样时间复杂度更大了 [瀑布汗~]。要不我还是不写了吧,免得误人子弟
2011年11月15日 10点11分 16
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 10
我貌似明白你的意思了,你是说先找出长度为2的回文串,然后标记他们的位置,再在这些位置只判断一个字符看看有木有长度为4的回文串,然后在标记位置,再延伸到8的回文串,这样貌似的确可以降低时间复杂度 [拜]
2011年11月15日 10点11分 18
level 3
xp1992121 楼主
不得不说时隔这么久我才上贴吧看到你们的回复实在是对大家感激涕零...我基本不用贴吧的请见谅哈...多谢多谢
2013年02月23日 06点02分 20
level 11
路过,嘿嘿
2013年02月23日 06点02分 21
1 2 尾页