LeetCode 214. 最短回文串(字符串哈希)

文章目录

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阿明),一起加油、一起学习进步!
Michael阿明

猜你喜欢

转载自blog.csdn.net/qq_21201267/article/details/108301067