如何在字符串中找到所有回文:
“AA BB AA TTT AA BB”
我知道如何在单个字符串中找到回文并且如果我通过删除“”字符来合并这些字符串,我仍然可以找到回文...但如果我这样做,我该如何重建原始文字.. ..
还是有其他方法可能花费更少的时间......任何线索......?
答案 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 BA
和AB
不是回文,但它们的串联是BA
。
答案 2 :(得分:0)
SauceMaster's answer描述了如何解决回文问题。
我只是想回答这个问题。
我知道如何在单个字符串中找到回文并且如果我通过删除“”字符来合并这些字符串,我仍然可以找到回文...但如果我这样做,我该如何重建原始字词?< / p>
首先复制字符串。