关于回文

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

madam , i'm adam

output:

madam madamimadam
...全文
156 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
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模式匹配算法,反向考虑即可

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧