题目
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。
示例 1:
输入:s = “aacecaaa”
输出:“aaacecaaa”
示例 2:
输入:s = “abcd”
输出:“dcbabcd”
提示:
0 <= s.length <= 5 * 104
s 仅由小写英文字母组成
思路
很直接, 就是从后往前依次递增取 i 个字符, 拼接到字符串开始, 当满足回文串时这时的 i 就是answer.
这里有一个代码技巧, 只比对逆串的 i 之后的子串和正串的倒数 i 个之前的子串是否相等即可.
rev[: i] == s[: length - i]
代码
class Solution:
def shortestPalindrome(self, s: str) -> str:
length = len(s)
if not length: return ""
rev = s[: : -1]
ans = 0
while True:
if rev[ans: ] == s[: length - ans]: break
ans += 1
return rev[: ans] + s