【问题标题】:Finding all Palindromes in a string [duplicate]查找字符串中的所有回文[重复]
【发布时间】:2013-01-18 19:45:31
【问题描述】:

可能重复:
Algorithm to find palindromes

如何在一个字符串中找到所有回文,例如:

“AA BB AA TTT AA BB”

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

或者有没有其他方法可以花费更少的时间...任何线索..?

【问题讨论】:

标签: java algorithm


【解决方案1】:

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

你可以从单个字符开始构建,这些字符本身就是微不足道的回文,然后考虑所有长度为 2 的子字符串,然后是所有长度为 3 的子字符串。

幸运的是,回文组具有递归关系,因此如果您删除了第一个和最后一个字母,您仍然必须有一个回文组。因此,如果一个长度为 4 的字符串是回文串(如 ABBA),那么去掉首尾字符的子串('BB')也一定是回文串。

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

【讨论】:

    【解决方案2】:

    问题实际上归结为查找所有子字符串。在您遍历字符串中的每个“单词”(AA、BB、AA、TTT 等)之后,您可以将每个单词视为单个字符,因此映射 AA->aBB->b、@987654323 @ 等,现在从您的示例中,新的“简化”字符串是 abatab。查找abatab 的所有子字符串,并检查每个子字符串是否是回文,如果是,则可以通过在地图中查找单词来打印出原始字符串。一个例子是aba -> AABBAA

    如果你的单词不是全部由相同的字母组成,问题就会变得更有趣。如果你有AB BA。在这种情况下,ABBA 不是回文,但它们的串联是 ABBA

    【讨论】:

      【解决方案3】:

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

      我只想回答这个问题。

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

      先复制字符串。

      【讨论】:

        猜你喜欢
        • 2014-03-31
        • 1970-01-01
        • 2012-04-20
        • 1970-01-01
        • 2017-08-05
        • 1970-01-01
        • 1970-01-01
        • 2016-12-19
        相关资源
        最近更新 更多