給定乙個字串s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。
示例 1:
輸入:示例 2:"aacecaaa"
輸出:"aaacecaaa"
輸入:"abcd"
輸出:"dcbabcd"
1、s=s1+s2,其中s1是回文串,s2是s-s1。
2、ans=反轉後的s2 +s
class solution
if(left>right)
break;
}string s2=s.substr(i+1,s.length()-i-1);
reverse(s2.begin(),s2.end());
return s2+s;
}};
這一種方法是比較巧妙的,r=s;reverse(r.begin(),r.end());t=s+"#"+r,要求s從起始位置開始的最長回文子串,就可以轉換成t的最長字首字尾問題;
比如s=ccab,r=bacc,t=ccab#bacc,那麼s中最長的回文串cc也就是t中字首cc。
再比如s=aacecaaa,r=aaacecaa,t=aacecaaa#aaacecaa,則最長回文子串是aacecaa,而t中字首為aacecaa。
這裡要特別注意需要加上#,這個很重要,防止s=aaa的時候出現錯誤。
所以這題其實就演變成kmp演算法,求解next陣列。具體原理見kmp演算法
class solution
if(t[i]==t[j+1])
next[i]=j;
}r=r.substr(0,r.size()-next[t.size()-1]-1);
return r+s;
}};
LeetCode 214 最短回文串
給定乙個字串s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。示例 1 輸入 aacecaaa 輸出 aaacecaaa 示例 2 輸入 abcd 輸出 dcbabcd 和hdu clairewd s message類似 其實等價於找最長字首回文串 aace...
leetcode 214 最短回文串
給定乙個字串 s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。示例 1 輸入 aacecaaa 輸出 aaacecaaa 示例 2 輸入 abcd 輸出 dcbabcd 因為只能從最前面新增字元,而且要保證新增了字元後組成1個回文串,所以列舉所有可能。對給...
LeetCode 214 最短回文串
給定乙個字串s,你可以通過在字串前面新增字元將其轉換為回文串。找到並返回可以用這種方式轉換的最短回文串。class solution def shortestpalindrome self,s str str 回文串從首到尾和從尾部到首部字串同,字串表示的數字同樣也相等。子串問題的乙個經典的解決方法...