题目
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。
示例 1:
输入: "aacecaaa"
输出: "aaacecaaa"
示例 2:
输入: "abcd"
输出: "dcbabcd"
解题思路
因为只能从最前面添加字符,而且要保证添加了字符后组成1个回文串,所以枚举所有可能。对给出的s
,从最后向前找回文串,如果找到index左边的子串是一个回文串的话,那么只需要添加index右边子串的逆序,就可以把字符串变成回文串。
每次判断回文串的复杂度是
o
(
n
2
)
o(n^2)
o(n2),最坏情况要判断n
次,因此最坏时间复杂度是
o
(
n
3
)
o(n^3)
o(n3)
代码
class Solution:
def shortestPalindrome(self, s: str) -> str:
for index in range(len(s), -1, -1):
left_word = s[:index]
add_word = s[index:]
if left_word == left_word[::-1]:
break
return add_word[::-1] + s