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/

posted on 2022-05-14 17:02  joannae  阅读(125)  评论(0编辑  收藏  举报

导航