leetcode 214. Shortest Palindrome | 214. 最短回文串(Java)
题目
https://leetcode.com/problems/shortest-palindrome/
题解
看了 Related Topics - Rolling Hash 下的相关题目,看到了:187. Repeated DNA Sequences 这道题,想到了如下解法。一开始用了个 set 存储可能的匹配,在一个测试用例上 OOM 了,后来发现不需要 set。
因为回文串包含两种情况,一种是奇数回文,一种是偶数回文,导致边界一直没处理好,所以后来干脆分类讨论了。
做完之后看了答案,看来不需要分类讨论。
另外,本题解的时间复杂度是 O(n^2),因为字符串比较的复杂度是线性的(对于相同的字符串来说,虽然常量池只存一遍,但运行时创建的字符串是在堆中的,所以并没有通过比较在常量池中的引用地址来判断是否相等,而且 equals 方法点进去之后,可以看到是逐个字符比较的。)
想要 O(n) 的话,可以用 KMP,详见官方答案吧。
class Solution {public String shortestPalindrome(String s) {int L = s.length();if (L <= 1) return s;String result = null;// 以字母本身为轴for (int i = L / 2; i >= 0; i--) {if (2 * i + 1 > L) continue;String right = s.substring(i + 1, 2 * i + 1);String left = new StringBuilder(s.substring(0, i)).reverse().toString();if (left.equals(right)) {result = new StringBuilder(s.substring(i + 1)).reverse() + s.substring(i);break;}}// 以字母本身为右回文串的首字母for (int i = (L + 1) / 2; i >= 0; i--) {if (2 * i > L) continue;String right = s.substring(i, 2 * i);String left = new StringBuilder(s.substring(0, i)).reverse().toString();if (left.equals(right)) {String newResult = new StringBuilder(s.substring(i)).reverse() + s.substring(i);if (result == null || newResult.length() < result.length()) result = newResult;break;}}return result;}
}
leetcode 214. Shortest Palindrome | 214. 最短回文串(Java)相关推荐
- LeetCode 214. 最短回文串(字符串哈希)
文章目录 1. 题目 2. 解题 1. 题目 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串. 找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aace ...
- Leetcode 214.最短回文串
Time: 20190906 Type: Hard 题目描述 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: &qu ...
- leetcode 214. 最短回文串 解题报告
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...
- 214. 最短回文串
214. 最短回文串 原始题目链接:https://leetcode.cn/problems/shortest-palindrome/ 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文 ...
- 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 Palindrome Partitioning(dfs +回文串 )
问题:给出一个字符串,输出回文串,使得拼接后为原来的字符串 思路:先通过动态规划得到所有的回文串,然后使用深度优先搜索得到所有的解 具体代码参考: https://github.com/wuli249 ...
最新文章
- Hadoop源码导入Eclipse
- c++实现ftp服务器_第三步,尝试用树莓派搭建你的云计算平台和服务器
- 北京信息科技大学第十一届程序设计竞赛
- LiveVideoStack主编观察02 / 附赠专属优惠码
- JavaFX 2 GameTutorial第3部分
- android adb server didn't ack
- 图解TCPIP-NAT
- 8 个弱点助我成为更好的开发人员!
- 用批处理开启或关闭windows 服务
- 溢出植入型木马(后门)的原型实现 作者:FLASHSKY(原创)
- Discuz收费插件模版合集包;discuz大部分插件下载地址;http://pan.baidu.com/s/1nt5hwU1
- python不定积分教学_python使用sympy不定积分入门及求解
- 求学信计算机专业英语,英语求学信模板
- 编写Shell脚本实现用户管理
- 1006 - 打印星号三角形
- abaqus6.13+vs2012+ivf2013用户子程序关联步骤
- 初识UAC(理论概括介绍)
- no matching host key type found. Their offer: ssh-rsa 问题解决
- Android修改主机名和IP地址问题
- win10 python 查看安装库的帮助文档
热门文章
- 洛谷 - P1028 数的计算(线性dp)
- linux时间格式怎么写,linux基础--时间格式
- oracle dbms_sql.describe_columns,PL/SQL Challenge 每日一题:2017-3-6 DBMS_SQL.DESCRIBE_COLUMNS
- 数据科学竞赛-自然语言处理赛流程
- HDU1066--高精度求阶乘最后非零位
- WebRTC 的 AudioSource/AudioTrack
- 从 301 跳转,聊聊边缘规则的那些小妙用
- 海量数据处理(一) :位图与布隆过滤器的概念以及实现
- scrapy使用cookie的三种方式
- Python中装饰器的理解和实现