Manacher 算法
来源:互联网 发布:mysql查询分析器 编辑:程序博客网 时间:2024/06/05 03:13
o(n)时间复杂度求最长回文子串的manacher算法:
public class Solution { public String longestPalindrome(String s) { if(s.length()==0) return ""; StringBuffer sb=new StringBuffer(); for(int i=0;i<s.length();i++){ sb.append('$').append(s.charAt(i)); if(i==s.length()-1) sb.append('$'); } int id=0,edge=1; int idRe=0,maxRe=1; s=sb.toString(); int[] dp=new int[s.length()]; dp[0]=1; for(int i=1;i<s.length();i++){ if(i<edge){ dp[i]=Math.min(dp[id*2-i],edge-i); }else{ dp[i]=1; } while(i-dp[i]>=0&&i+dp[i]<s.length()&&s.charAt(i-dp[i])==s.charAt(i+dp[i])){ dp[i]++; } if(dp[i]+i>edge){ id=i; edge=dp[i]+i; } if(maxRe<dp[i]){ maxRe=dp[i]; idRe=id; } } StringBuffer re=new StringBuffer();int start=idRe-maxRe+2;for(int i=start;i<=idRe*2-start;i+=2){ re.append(s.charAt(i)); } return re.toString(); }}
阅读全文
1 0
- Manacher算法
- Manacher算法
- Manacher算法
- Manacher算法
- Manacher 算法
- manacher算法
- manacher 算法
- Manacher算法
- manacher算法
- manacher算法
- manacher算法
- Manacher 算法
- Manacher算法
- manacher算法
- Manacher算法
- manacher算法
- Manacher算法
- Manacher算法:
- 计算机网络 自顶向下方法 第二章 应用层
- 安卓镜像文件编译打包过程
- JSP_2017_7_11___续
- 23种设计模式全解析
- Redis对字符串、Hash(对象)、列表(List)处理的操作命令
- Manacher 算法
- Hadoop 2.8.0 + CentOS7.3搭建
- conda与Anaconda
- for的内嵌for之初体验
- JS中清空数组的三种方式
- 计算机网络 自顶向下方法 第三章 运输层
- [POJ 1273] Drainage Ditches 最大流 模板题
- klee+Ubuntu16.04+llvm3.9安装
- CS20SI Tensorflow for Deeplearning课程笔记(三)