在一个字符串中查找所有Palindromes

时间:2013-01-18 19:45:32

标签: java algorithm

  

可能重复:
  Algorithm to find palindromes

如何在字符串中找到所有回文:

“AA BB AA TTT AA BB”

我知道如何在单个字符串中找到回文并且如果我通过删除“”字符来合并这些字符串,我仍然可以找到回文...但如果我这样做,我该如何重建原始文字.. ..

还是有其他方法可能花费更少的时间......任何线索......?

3 个答案:

答案 0 :(得分:4)

编辑:我假设您要问的是:给定一串字符,如何确定所有可能的回文子串?

您可以从单个字符构建,这些字符本身就是简单的回文,然后考虑长度为2的所有子字符串,然后考虑长度为3的所有子字符串。

幸运的是,palindome具有递归关系,如果你删除了第一个和最后一个字母,你仍然必须有一个回文。因此,如果长度为4的字符串是回文(如ABBA),则删除了第一个和最后一个字符('BB')的子字符串也必须是回文。

考虑使用动态编程解决方案来计算任何给定字符串,因为上面定义的递归关系满足DP的最佳子问题要求。

答案 1 :(得分:0)

问题确实减少到找到所有子串。在您浏览了字符串中的每个“单词”(AA,BB,AA,TTT等)之后,您可以将每个单词看作单个字符,因此映射AA->a,{{1} },BB->b等,现在从您的示例中,新的“简化”字符串为TTT->t。查找abatab的所有子字符串并检查每个子字符串是否为回文,如果是,则可以通过在地图中查找单词来打印出原始字符串。一个例子是abatab

如果你的单词并非全部由相同的字母组成,问题会变得更加有趣。如果您有aba -> AABBAA。在这种情况下,AB BAAB不是回文,但它们的串联是BA

答案 2 :(得分:0)

SauceMaster's answer描述了如何解决回文问题。

我只是想回答这个问题。

  

我知道如何在单个字符串中找到回文并且如果我通过删除“”字符来合并这些字符串,我仍然可以找到回文...但如果我这样做,我该如何重建原始字词?< / p>

首先复制字符串。