214. 最短回文串

原始题目链接:https://leetcode.cn/problems/shortest-palindrome/

给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。

示例 1:

输入:s = “aacecaaa”
输出:“aaacecaaa”
示例 2:

输入:s = “abcd”
输出:“dcbabcd”

提示:

0 <= s.length <= 5 * 104
s 仅由小写英文字母组成

解题思路:

使用字符串哈希算法,找到s的最长前缀回文子串,找的方式是使用哈希算法,计算前缀子串和反序前缀子串的哈希值是否相等,相等就是回文串。题目要求的是需要添加的字符串,就是s-s的最长前缀子串。
需要记住两个公式:
#s的前缀串的哈希值公式
left = (left * base + ord(s[i])) % mod
#s的反序前缀串哈希值公式
right = (right + mul * ord(s[i])) % mod

代码实现:

class Solution:def shortestPalindrome(self, s: str) -> str:n = len(s)# 设置base计算哈希值,设置模为了哈希值的结果表示在一个可控的范围base, mod = 131, 10**9 + 7# left表示前缀哈希值,right表示反序前缀哈希值left = right = 0# 存储base的幂mul = 1# s中最长的回文串对应在s的下标,初始化为-1best = -1# 从s的头开始查找for i in range(n):# s的前缀串的哈希值公式left = (left * base + ord(s[i])) % mod# s的反序前缀串哈希值公式right = (right + mul * ord(s[i])) % mod# 如果哈希值相等表示是回文串if left == right:best = i# 更新幂mul = mul * base % mod# s - s的最长回文前缀串的反序串,就是要添加的字符串add = ("" if best == n - 1 else s[best+1:])return add[::-1] + s

参考文献:
https://leetcode.cn/problems/shortest-palindrome/solution/zui-duan-hui-wen-chuan-by-leetcode-solution/

214. 最短回文串相关推荐

  1. leetcode 214. 最短回文串 解题报告

    给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...

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

    文章目录 1. 题目 2. 解题 1. 题目 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串. 找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aace ...

  3. Leetcode 214.最短回文串

    Time: 20190906 Type: Hard 题目描述 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: &qu ...

  4. leetcode 214. Shortest Palindrome | 214. 最短回文串(Java)

    题目 https://leetcode.com/problems/shortest-palindrome/ 题解 看了 Related Topics - Rolling Hash 下的相关题目,看到了 ...

  5. leetcode214. 最短回文串

    214. 最短回文串 难度困难114 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa& ...

  6. python最短回文串_LeetCode-Python-214. 最短回文串

    给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...

  7. 力扣- - 最短回文串(KMP算法)

    力扣- - 最短回文串(KMP算法) 文章目录 力扣- - 最短回文串(KMP算法) 一.题目描述 二.分析之KMP算法 1.暴力法 2.KMP算法 3.next数组求法1:暴力查找最长的前后缀 4. ...

  8. leetcode214. 最短回文串(kmp)

    给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...

  9. [Leetcode][第214题][JAVA][最短回文串][KMP][RK]

    [问题描述][中等] [解答思路] 1. 字符串哈希 复杂度 class Solution {public String shortestPalindrome(String s) {int n = s ...

最新文章

  1. linux虚拟机安装oracle全过程(一)
  2. MySQL备份命令mysqldump参数说明与示例
  3. java-数据结构-续
  4. Java程序员如何在编码中减少bug存在
  5. EventBus设计与实现分析——事件的发布
  6. 别看360完成私有化 仍有三因素阻碍中概股回归
  7. P2149-[SDOI2009]Elaxia的路线【最短路】
  8. text-indent的用法
  9. c语言无法打开源文件stdafx.h,vs2010 中无法打开 源文件 stdafx.h 未定义标识符 “xxx”...
  10. Python机器学习:SVM001什么是支撑向量机
  11. NHibernet能带来什么呢?
  12. mysql 存储过程 调度_mysql 存储过程和事件调度
  13. python第五篇:Linux上将txt导入mysql
  14. visio 2003密钥
  15. JavaWeb - 国家语言代码表
  16. 教你将PDF文件旋转的方法
  17. CentOS 7 系统部署之四:磁盘扩容与调整
  18. Xilinx FPGA资源
  19. JavaSE基础知识汇总
  20. 易语言让我东山再起 邓学彬(优秀文章)

热门文章

  1. HI3516DV300 BT1120输入
  2. 微信小程序列表实现文字内容超出隐藏并显示全文/收起按钮
  3. 基于Raft协议的KV存储系统
  4. java多线程并发及线程池
  5. 2019年下半年计算机水平软件,2019年的下半年全国计算机技术与软件专业技术资格(水平)考试成绩查询通知...
  6. 【2022最新Java面试宝典】—— Tomcat面试题(15道含答案)
  7. 广发卡分期有哪些套路?
  8. 【C++大作业】实现俄罗斯方块(附代码+实现思路带详细注释)
  9. 浅析YOLO目标检测算法AI安全帽识别技术及场景应用
  10. 【CG物理模拟系列】粒子法--表面生成手法(上)