214. 最短回文串 (Java)
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。
示例 1:
输入:s = "aacecaaa"
输出:"aaacecaaa"
示例 2:
输入:s = "abcd"
输出:"dcbabcd"
提示:
0 <= s.length <= 5 * 10^4
s 仅由小写英文字母组成
思路:问题等价转换。
我们需要在给定的字符串 s的前面添加字符串 s',是的s'+s是回文数,显然|s'| < |s|,那么我们可以将 s分成两部分:
- 长度为 |s| - |s'|的前缀s1,
- 长度为|s'|的后缀s2
可以得出,s1也是回文数。那么原问题可以等价转换为找出最长的s1。
方法一:字符串哈希
方法二:KMP
Ref:https://leetcode.cn/problems/shortest-palindrome/solution/zui-duan-hui-wen-chuan-by-leetcode-solution/