給定乙個字串s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。
示例 1:
輸入: "aacecaaa"
輸出: "aaacecaaa"
示例 2:
輸入: "abcd"
輸出: "dcbabcd"
直覺告訴我們,我們找出左邊的最長回文子串,比如aacecaaa
左側最長的回文子串就是aacecaa
,然後將右側剩餘的部分反轉補到原串的左側即可。由於找的是最長的回文子串,直接從右往左,找到第乙個回文子串即可。對應的**如下所示
class solution:
def shortestpalindrome(self, s):
""":type s: str
:rtype: str
"""r = 1
for i in range(len(s), 0, -1):
if s[0:i] == (s[0:i])[::-1]:
r = i
break
return (s[r:])[::-1] + s
第二種思路相較於第一種思路更為巧妙,利用到了kmp中的fail陣列,也有人叫做next陣列。
因為fail陣列中記錄了最短回退位置,也即保證了回退後所匹配的部分是最長的。我們直接將原串和反轉的原串拼在一起,求出其fail陣列,最後的位置能夠回退到的位置即為左側最長的回文子串。
#includeusing namespace std;
static auto x = ()
();const int maxn = 100010;
int fail[maxn];
class solution
return t.substr(0, t.size()-fail[sz]) + s;
}};int main()
LeetCode214 最短回文串
給定乙個字串s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。示例 1 輸入 aacecaaa 輸出 aaacecaaa 示例 2 輸入 abcd 輸出 dcbabcd 1 s s1 s2,其中s1是回文串,s2是s s1。2 ans 反轉後的s2 s cl...
LeetCode 214 最短回文串
給定乙個字串s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。示例 1 輸入 aacecaaa 輸出 aaacecaaa 示例 2 輸入 abcd 輸出 dcbabcd 和hdu clairewd s message類似 其實等價於找最長字首回文串 aace...
leetcode 214 最短回文串
給定乙個字串 s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。示例 1 輸入 aacecaaa 輸出 aaacecaaa 示例 2 輸入 abcd 輸出 dcbabcd 因為只能從最前面新增字元,而且要保證新增了字元後組成1個回文串,所以列舉所有可能。對給...