文章目录
- 1. 题目
- 2. 解题
1. 题目
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。
找到并返回可以用这种方式转换的最短回文串。
示例 1:
输入: "aacecaaa"
输出: "aaacecaaa"示例 2:
输入: "abcd"
输出: "dcbabcd"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shortest-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 参考官方题解,字符串哈希
- 使用字符串哈希,对s的头部子串的正序哈希和逆序哈希进行计算,找出最长相等的回文串子串,其结束位置为 idx
- 剩余的部分为
[idx+1, n)
,将其反转后加到 s 头部就是最短的新回文串
class Solution {
public:string shortestPalindrome(string s) {long long n = s.size(), i, idx = -1, base = 1, mod = 1e9+7;long long left = 0, right = 0;for(i = 0; i < n; i++) {left = (left*131 + s[i])%mod;right = (right + s[i]*base)%mod;if(left == right)idx = i;base *= 131;base %= mod;}string A = s.substr(idx+1);reverse(A.begin(), A.end());return A+s;}
};
0 ms 7.3 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!