题目

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)相关推荐

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

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

  2. Leetcode 214.最短回文串

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

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

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

  4. 214. 最短回文串

    214. 最短回文串 原始题目链接:https://leetcode.cn/problems/shortest-palindrome/ 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文 ...

  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 Palindrome Partitioning(dfs +回文串 )

    问题:给出一个字符串,输出回文串,使得拼接后为原来的字符串 思路:先通过动态规划得到所有的回文串,然后使用深度优先搜索得到所有的解 具体代码参考: https://github.com/wuli249 ...

最新文章

  1. Hadoop源码导入Eclipse
  2. c++实现ftp服务器_第三步,尝试用树莓派搭建你的云计算平台和服务器
  3. 北京信息科技大学第十一届程序设计竞赛
  4. LiveVideoStack主编观察02 / 附赠专属优惠码
  5. JavaFX 2 GameTutorial第3部分
  6. android adb server didn't ack
  7. 图解TCPIP-NAT
  8. 8 个弱点助我成为更好的开发人员!
  9. 用批处理开启或关闭windows 服务
  10. 溢出植入型木马(后门)的原型实现 作者:FLASHSKY(原创)
  11. Discuz收费插件模版合集包;discuz大部分插件下载地址;http://pan.baidu.com/s/1nt5hwU1
  12. python不定积分教学_python使用sympy不定积分入门及求解
  13. 求学信计算机专业英语,英语求学信模板
  14. 编写Shell脚本实现用户管理
  15. 1006 - 打印星号三角形
  16. abaqus6.13+vs2012+ivf2013用户子程序关联步骤
  17. 初识UAC(理论概括介绍)
  18. no matching host key type found. Their offer: ssh-rsa 问题解决
  19. Android修改主机名和IP地址问题
  20. win10 python 查看安装库的帮助文档

热门文章

  1. 洛谷 - P1028 数的计算(线性dp)
  2. linux时间格式怎么写,linux基础--时间格式
  3. oracle dbms_sql.describe_columns,PL/SQL Challenge 每日一题:2017-3-6 DBMS_SQL.DESCRIBE_COLUMNS
  4. 数据科学竞赛-自然语言处理赛流程
  5. HDU1066--高精度求阶乘最后非零位
  6. WebRTC 的 AudioSource/AudioTrack
  7. 从 301 跳转,聊聊边缘规则的那些小妙用
  8. 海量数据处理(一) :位图与布隆过滤器的概念以及实现
  9. scrapy使用cookie的三种方式
  10. Python中装饰器的理解和实现