最短回文串

2022-05-04 03:33:07 字數 869 閱讀 5278

給定乙個字串 s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。

示例 1:

輸入: "aacecaaa"

輸出: "aaacecaaa"

示例 2:

輸入: "abcd"

輸出: "dcbabcd"

解法1思路:因為是在前面加乙個最少的資料,我們先想最笨的辦法, 就是在abcd前面加上abcd的翻轉,也就是變成dcbaabcd,這個肯定是回文的,

記錄原字串為s,翻轉後的為rev_s,如果rev_s的後半部分和s的前半部分有一樣的串,比如上面例子中的"a",那麼新加進來的就可以省略這一部分

因為rev_s的字尾是s字首的翻轉,那麼如果s的字首有乙個很長的回文串,那麼只需要把回文串以外的部分反轉之後放到s前面。

當然寫法有很多種,直接n2時間複雜度找s的最長字首回文串,或者找s的字首和rev_s的字尾最長的相同長度,最終得解,這個的時間複雜度為n2

解法2:從解法一可以看出來其實是找s的字首和rev_s的字尾最長的相同串,那麼如果把s和rev_s拼起來,那麼就是求這個new_s的字首和字尾最長的相同長度,其實就是kmp演算法設計next表的過程

因為考慮到在處理new_s的時候,可能會把s和rev_s混作一起,那麼在這兩個串之間加乙個#

直接上**,for迴圈部分,直接參考kmp

class

solution

if (s.charat(t) ==new_s.charat(i))

f[i] =t;

}return

new stringbuilder(s.substring(f[len - 1])).reverse().tostring() +s;

}}

最短回文串 題解

最短回文串 palindrome.pas c cpp 如果乙個字串正過來讀和倒過來讀是一樣的,那麼這個字串就被稱作回文串。例如abcdcba,abcddbca就是回文串,而abcdabcd不是。你要解決的問題是 對於任意乙個字串,輸出將這個字串變為回文串需要插入的最少字元個數,比如,ab3bd只需要...

作業 最短回文串

最短回文串 palindrome.pas c cpp 如果乙個字串正過來讀和倒過來讀是一樣的,那麼這個字串就被稱作回文串。例如 abcdcba,abcddbca 就是回文串,而 abcdabcd 不是。你要解決的問題是 對於任意乙個字串,輸出將這個字串變為回文串需要插入的最 少字元個數,比如,ab3...

214 最短回文串

難度 困難 題目描述 思路總結 python字串反轉幾種方法 還是那句話,現階段注重的是數量,質量等後期提高。這題利用簡單的直覺做題,這種思路還需要再積累。沒見過這種題是很難想出來的。題解一 class solution def shortestpalindrome self,s str str 思...