LeetCode Shortest Palindrome(kmp的妙用)
题意:给出一个字符串,通过在字符串前添加字符,使得新的字符串为最短的对称字符串
思路:假设原字符串为s,将其取反的字符串为text,求text的后缀与s的前缀相同时的索引,将text与s索引后的字符拼接起来就是要求的结果
具体代码如下:
public class Solution
{private int[] kmp_table(String s){int[] next = new int[s.length()];next[0] = -1;int j = 0;for (int i = 1; i < s.length(); i++) {int k = next[i - 1];while (k > -1 && s.charAt(k) != s.charAt(i - 1)) {k = next[k];}next[i] = k + 1;}return next;}private int kmp_search(String text, String pattern){int[] next = kmp_table(pattern);int m = 0, i = 0;while (m + i < text.length()) {while (pattern.charAt(i) == text.charAt(m + i)) {if (m + i == text.length() - 1) {return m;}i++;}m += i - next[i];i = next[i] > -1 ? next[i] : 0;}return 0;}public String shortestPalindrome(String s){if (s.isEmpty()) return s;String text = new StringBuilder(s).reverse().toString();int index = kmp_search(text, s);StringBuilder ans = new StringBuilder();ans.append(text);ans.append(s.substring(text.length() - index));return ans.toString();}
}
解法二:
public class Solution {private int[] kmp_table(String s){int[] next = new int[s.length()];next[0] = -1;int j = -1, i = 0;while (i < s.length()){while (j > -1 && s.charAt(i) != s.charAt(j)){j = next[j];}i++;j++;if (i < s.length() && j < s.length()){if (s.charAt(i) == s.charAt(j)) next[i] = next[j];else{next[i] = j;}}}return next;}private int kmp_search(String text, String pattern){int[] next = kmp_table(pattern);int m = 0, i = 0;while (m < text.length()) {while (i > -1 && pattern.charAt(i) != text.charAt(m)) {i = next[i];}m++;i++;if (i >= pattern.length()){break;}}return m - i;}public String shortestPalindrome(String s){if (s.isEmpty()) return s;String text = new StringBuilder(s).reverse().toString();int index = kmp_search(text, s);StringBuilder ans = new StringBuilder();ans.append(text);ans.append(s.substring(text.length() - index));return ans.toString();}
}
LeetCode Shortest Palindrome(kmp的妙用)相关推荐
- 【To Understand! 回文串6 KMP算法】LeetCode 214. Shortest Palindrome
LeetCode 214. Shortest Palindrome Solution1:最笨的方法.时间复杂度O(n2)O(n2)O(n^2) 竟然能AC,xixixi class Solution ...
- leetcode 214 Shortest Palindrome
lc214 Shortest Palindrome 可以将问题转化成找到原字符串的最长palindrome子串(注意,子串必须以s[0]为起始) 例如:sdserf sds为最长palindrome子 ...
- 【整数转字符串】LeetCode 9. Palindrome Number
LeetCode 9. Palindrome Number Solution1: 不利用字符串 class Solution { public:bool isPalindrome(int x) {if ...
- 【To Understand!回文串8 哈希表】LeetCode 336. Palindrome Pairs
LeetCode 336. Palindrome Pairs Solution1:我的答案 最笨的方法,果然因为时间复杂度太高而无法AC-- 难怪是hard 只是记录一下-- class Soluti ...
- 【回文串7】LeetCode 234. Palindrome Linked List
LeetCode 234. Palindrome Linked List Solution1:我的答案 一遍过,哈哈哈! /*** Definition for singly-linked list. ...
- 【回文串5 重点+动态规划】LeetCode 132. Palindrome Partitioning II
LeetCode 132. Palindrome Partitioning II Solution1:我的答案1 直接模仿131那道题的DFS解法,找其中size最小的.果不其然,因为超时只能部分AC ...
- 【回文串4 DFS】LeetCode 131. Palindrome Partitioning
LeetCode 131. Palindrome Partitioning DFS的经典套路题目!!! 八皇后问题写法类似!!! Solution1: 转载网址:http://www.cnblogs. ...
- 【回文串2】LeetCode 9. Palindrome Number
LeetCode 9. Palindrome Number Solution1:我的答案 思路一:转化为字符串 class Solution { public:bool isPalindrome(in ...
- leetcode 214. Shortest Palindrome | 214. 最短回文串(Java)
题目 https://leetcode.com/problems/shortest-palindrome/ 题解 看了 Related Topics - Rolling Hash 下的相关题目,看到了 ...
最新文章
- ORB_SLAM2局部建图线程
- 异常检测算法:Isolation Forest
- r软件linux 安装失败,R语言在Linux环境下安装Curl出错问题的解决
- 解决NIOS II工程拷贝后无法编译问题
- 《Linux系统和网络性能监测》读书笔记
- 史上最会抄的数学家!把阿拉伯数字直接抄进自己的书里,连中国几千年前的名著都惨遭毒手.........
- linux日常常用命令分析
- 血眼龙王萧沙传-翠花篇
- toastr-min.css,Toastr插件提示框使用说明
- AcWing 796. 子矩阵的和
- 四则运算2之设计思路篇
- Vijos 1303
- 文件完整性的检测与监控
- logo下方显示技术支持信息_用“技术支持信息”显示的OEM信息备份修改方法
- 共轭、转置,共轭转置和逆矩阵的性质
- 软件版本中的beta,rc,ga是什么意思
- 二叉树基础题(五):二叉树的下一个节点最低公共祖先节点
- 远控软件GHOST源码免杀
- 【分享】“抖店“在集简云平台集成应用的常见问题与解决方案
- 浙里办开发票据认证单点登陆、令牌获取用户信息
热门文章
- linux系统中用户切换
- linux 相对路径
- Google PageRank的计算源代码
- python这个软件学会能做什么工作-不要再复制粘贴了 !学会Python,分分钟搞定一整天的工作...
- python编程例子 输入 输出-推荐 :手把手教你用Python创建简单的神经网络(附代码)...
- python 吧-做为IT人的你 趁年轻学点Python吧
- python源代码-python源码
- python好找工作吗2017-2017,再来聊一聊Python,未来发展怎样?
- 学python要下载什么-从应用的角度去学习Python--为孩子下载课本
- 如何在电脑上使用python-如何在Windows上使用Python进行开发