leetcode 214 最短回文串 解題報告

2022-03-05 08:53:26 字數 1062 閱讀 3266

給定乙個字串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個回文串,所以列舉所有可能。對給...