如何将给定的字符串转换为回文?

时间:2014-10-20 14:14:42

标签: java string algorithm optimization palindrome

我有一个面试问题:

  

“提供输出,将给定的字符串转换为回文结构   (回文字符串)应包含给定字符串“

的子字符串

所以我这样做了,给定root作为输入,我将找到该字符串的反转并将其附加到给定的输入。所以我得到了字符串:

roottoor

是回文并且还包含i / p(root)存在于o / p中。

鉴于解决方案,该工作人员说,它不是最佳解决方案,你可以给出一个最佳解决方案吗?

我无法找到除此之外的任何内容。

还有其他解决方案吗?

他说需要用Java来完成。

2 个答案:

答案 0 :(得分:5)

对于给定的字符串s,找到s1末尾已经是回文的最长子串s。然后将s\s1的反面放在最后。

例如,对于输入字符串"lambada""ada"是回文,因此您只需添加"lamb"的反向,结果为"lambadabmal"

编辑:考虑到maartinus'回答,您还应该检查相反的方向并选择导致较短回文的那个:

对于给定的字符串s,找到s1开头已经是回文的最长子串s。然后只需在开头插入s\s1的反向。

例如,对于输入字符串"arafat""ara"是回文,因此您只需在开头插入"fat"的反向,结果为"tafarafat"

答案 1 :(得分:3)

另一个答案明显错过了一开始。实施例

racecars -> racecarsracecar // when only the end is considered

racecars -> sracecars       // when the start is considered

只看两端并返回更好的结果。