如何找到最长的回文

时间:2012-04-13 00:01:55

标签: c++ palindrome

  

可能重复:
  Write a function that returns the longest palindrome in a given string

我有一个C ++作业,要求我编写一个程序,找到给定文本中最长的回文。例如,文本为:asdqerderdiedasqwertunut,我的程序应在索引19中找到tunut。但是,如果输入更改为此astunutsaderdiedasqwertunut,则应找到astunutsa在索引22中索引为0而不是tunut

所以,我的问题是这个。但我是这个主题的初学者,我知道只是字符串类,循环,ifs。如果你可以帮助我,那就太棒了。

提前致谢。

2 个答案:

答案 0 :(得分:3)

这个想法非常简单:

  • 编写一个带有字符串的函数is_palindrome(string),如果它是回文,则返回true,如果不是,则返回false
  • 使用该函数,编写两个嵌套循环,从原始字符串中删除不同的子字符串。将每个子字符串传递给is_palindrome(string),然后选择返回true的字符串中最长的字符串。

您可以通过检查较短的子串之前的最长子串来进一步优化您的程序。如果您检查从最长到最短的子串,您将能够在找到第一个回文后立即返回。

答案 1 :(得分:1)

Dasblinkenlight的想法非常好,但这种方式更快:

回文有偶数个字母或奇数,所以你有两种情况。让我们从均匀开始吧。您需要找到两个连续相同的字母,然后检查前一个字母是否与下一个字母相同。在另一种情况下也一样,除了起初你只需要一个字母。我不会说英语,所以我希望你理解。 :)