• 全部
  • 问答

关于回文

jwd_1_cool 2003-07-29 10:25:06
如何在一个字符串中,找 回文啊?
input:

madam , i'm adam

output:

madam madamimadam
...全文
91 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
standlove 2003-08-01

另外考虑一下 奇数 和 偶数长度 就可以了~
xAx xx 往两边搜就可以了, dp 是不行的。
回复
jwd_1_cool 2003-08-01
apogeecsj(Running_386) 的方法好象可行啊
回复
jwd_1_cool 2003-07-30
palindromes : 回文
回复
jwd_1_cool 2003-07-30
note that some of the palindromes in the input line, namely ``ADA'', ``MIM'', ``AMIMA'', ``DAMIMAD'', and ``ADAMIMADA'', are not reported because they appear at the center of reported ones. ``MADAM'' is reported, as it does not appear in the center, but only once, disregarding its second occurrence.


ps: how to write a formula of dp for it
回复
alongzju 2003-07-29
楼上的复杂度太高。
可以用dp的,自己推推dp公式就可以了。
回复
寻开心 2003-07-29
我们先考虑回文从字符串第一个字母开始的情形
如果第一个字母是C,那么我们开始搜索字符串当中字母C出现的最后一个位置。
然后判断这两个位置之间的小字符串是否也是回文
如果是则表示整个串都是。(而且是最长的回文串)
如果不是则表示整个串都不是。
如果整个串不是,那么再查找倒数第二个C出现的位置,然后判断中间串,依次类推。

对于回文不开始于第一个字母的情形,可以通过逐步缩短的办法,在判断完成第一个字母开始的回文后,把字符串去掉第一个字母,然后重新处理
回复
zzwu 2003-07-29
这个问题有一小问题:至少要说明一下长度吧! 否则,对上例,每个字母是一个回文,ada也是回文,等等等.
回复
apogeecsj 2003-07-29
先选定字符串里的一个字符,看它相领的两个字符是否相同,如相同则继续向两边括展,判断对称的字符是否相同。一旦出了字符串边界就break,或遇到不对称也break,记录最长的对称串(外层通过字符串长度来控制循环)
for(i=1;i<lenth;i++)
{
while(1)
{
if(((i-k)<0)||((i+k)>=lenth)) break;

if(input[i-k]==input[i+k])
{ total++;}
else break;

k++;
}

k=0;
if(total>temp_total)
temp_total=total;


total=0;
}
cout<<temp_total<<endl;
回复
lymgf 2003-07-29
想了想,我说的不对,因为不是特定的字符穿查找
回复
lymgf 2003-07-29
KMP模式匹配算法,反向考虑即可
回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2003-07-29 10:25
社区公告
暂无公告