214. 最短回文串
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. 最短回文串相关推荐
- leetcode 214. 最短回文串 解题报告
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...
- LeetCode 214. 最短回文串(字符串哈希)
文章目录 1. 题目 2. 解题 1. 题目 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串. 找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aace ...
- Leetcode 214.最短回文串
Time: 20190906 Type: Hard 题目描述 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: &qu ...
- leetcode 214. Shortest Palindrome | 214. 最短回文串(Java)
题目 https://leetcode.com/problems/shortest-palindrome/ 题解 看了 Related Topics - Rolling Hash 下的相关题目,看到了 ...
- leetcode214. 最短回文串
214. 最短回文串 难度困难114 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa& ...
- python最短回文串_LeetCode-Python-214. 最短回文串
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...
- 力扣- - 最短回文串(KMP算法)
力扣- - 最短回文串(KMP算法) 文章目录 力扣- - 最短回文串(KMP算法) 一.题目描述 二.分析之KMP算法 1.暴力法 2.KMP算法 3.next数组求法1:暴力查找最长的前后缀 4. ...
- leetcode214. 最短回文串(kmp)
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...
- [Leetcode][第214题][JAVA][最短回文串][KMP][RK]
[问题描述][中等] [解答思路] 1. 字符串哈希 复杂度 class Solution {public String shortestPalindrome(String s) {int n = s ...
最新文章
- linux虚拟机安装oracle全过程(一)
- MySQL备份命令mysqldump参数说明与示例
- java-数据结构-续
- Java程序员如何在编码中减少bug存在
- EventBus设计与实现分析——事件的发布
- 别看360完成私有化 仍有三因素阻碍中概股回归
- P2149-[SDOI2009]Elaxia的路线【最短路】
- text-indent的用法
- c语言无法打开源文件stdafx.h,vs2010 中无法打开 源文件 stdafx.h 未定义标识符 “xxx”...
- Python机器学习:SVM001什么是支撑向量机
- NHibernet能带来什么呢?
- mysql 存储过程 调度_mysql 存储过程和事件调度
- python第五篇:Linux上将txt导入mysql
- visio 2003密钥
- JavaWeb - 国家语言代码表
- 教你将PDF文件旋转的方法
- CentOS 7 系统部署之四:磁盘扩容与调整
- Xilinx FPGA资源
- JavaSE基础知识汇总
- 易语言让我东山再起 邓学彬(优秀文章)
热门文章
- HI3516DV300 BT1120输入
- 微信小程序列表实现文字内容超出隐藏并显示全文/收起按钮
- 基于Raft协议的KV存储系统
- java多线程并发及线程池
- 2019年下半年计算机水平软件,2019年的下半年全国计算机技术与软件专业技术资格(水平)考试成绩查询通知...
- 【2022最新Java面试宝典】—— Tomcat面试题(15道含答案)
- 广发卡分期有哪些套路?
- 【C++大作业】实现俄罗斯方块(附代码+实现思路带详细注释)
- 浅析YOLO目标检测算法AI安全帽识别技术及场景应用
- 【CG物理模拟系列】粒子法--表面生成手法(上)