我有一个面试问题:
“提供输出,将给定的字符串转换为回文结构 (回文字符串)应包含给定字符串“
的子字符串
所以我这样做了,给定root
作为输入,我将找到该字符串的反转并将其附加到给定的输入。所以我得到了字符串:
roottoor
是回文并且还包含i / p(root
)存在于o / p中。
鉴于解决方案,该工作人员说,它不是最佳解决方案,你可以给出一个最佳解决方案吗?
我无法找到除此之外的任何内容。
还有其他解决方案吗?
他说需要用Java来完成。
答案 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
只看两端并返回更好的结果。