后缀求可重叠最长重复子串
来源:互联网 发布:seo外包优化 编辑:程序博客网 时间:2024/04/28 05:40
假设我们有这样的字符串及数组:
String str="banana";boolean flag[]=new boolean[str.length];
flag为后缀数组,用于标记子串位置
for(int i=0;i<str.length;i++) flag[i]=i;
后缀:从某个位置i开始到整个串末尾结束的一个特殊子串
flag[i]指向字符串第i个位置起始的子串for(int i=0;i<str.length();i++) System.out.println(""+str.substring(flag[i]));则会输出:
banana
anana
nana
ana
na
a
也许到这里,你还什么都不知道后缀数组是干啥用的,下面就要介绍一些应用和功能
得到后缀数组来对后缀子串进行排序:
for(int i=1;i<str.length();i++){//根据字典顺序对后缀排序,起始位置存入flag数组中,使用插入排序根据字典顺序对flag重组 for(int j=i;j>0;j--){ int f=str.substring(flag[j]).compareTo(str.substring(flag[j-1]));if(f<0){int t=flag[j];flag[j]=flag[j-1];flag[j-1]=t;} }}借用之前的输出则变为:
a
ana
anana
banana
na
nana
进而可以求得最长后缀重复子串
int max=0;int wei=-1;for(int i=0;i<str.length();i++){if(symmetry(str.substring(flag[i]))){ if(str.substring(flag[i]).length()>max) { wei=i;max=str.substring(flag[i]).length(); }}}System.out.println("最长对称子串为:"+str.substring(flag[wei]));最长对称子串为:anana
但是这样只是求得从某个位置i到最后的子串是否重叠,如果str="asdfghasddsawerix",则最长对称子串会只为"x"
下面写一个求字符串的最长对称子串的方法:
public static void maxSymmetry(String str){int max=-1;int start=-1;int end=-1;for(int i=0;i<str.length();i++){for(int j=i+1;j<str.length();j++){if(str.charAt(i)==str.charAt(j)){boolean flag=symmetry(str.substring(i,j+1));if(j-i+1>=max){start=i;end=j+1;max=j-i+1;}}}}System.out.println(str.substring(start,end));}输入asdfghasddsawerix则会得到asddsa子串
当然这个方法还可以优化,由于时间问题,懒得弄了,后期再改进优化吧。
1 0
- 后缀求可重叠最长重复子串
- 求最长可重叠重复子串
- 【后缀数组求可重叠的k 次最长重复子串】POJ 3261
- PKU3261(Milk Patterns)求可重叠k次的最长重复子串(后缀数组+二分)
- poj-3261 后缀数组求可重叠的k次最长重复子串
- POJ3261 求指定出现次数的可重叠的最长重复子串(后缀数组)
- POJ 3261 后缀数组:求可重叠的最长重复子串
- POJ - 3261 Milk Patterns (后缀数组求可重叠的 k 次最长重复子串)
- poj 3261(后缀数组,求可重叠的k次最长重复子串)
- 后缀数组求最长重复子串(可重叠的)
- POJ3261_Milk Patterns_后缀数组::求可重叠的k次最长重复子串
- 后缀数组--(可重叠最长重复子串问题)
- 求一个串中出现的第一个最长可重叠重复子串 [后缀数组解法]
- 求一个串中出现的第一个最长可重叠重复子串 [后缀数组解法]
- POJ 3261 Milk Patterns 求可重叠的 k 次最长重复子串(后缀数组)
- 后缀数组模版 及 可重叠和不可重叠最长重复子串【for_wind】
- 重复旋律 后缀数组 板子 最长可重叠重复子串问题
- hihoCoder 1403后缀数组一·重复旋律(最长可重叠重复子串问题)
- Linux系统创建一个新的进程
- 内核分析-第六周
- 设计模式之设计原则-单一职责原则
- Ubuntu启动出错相关
- 第5讲 类和对象的高级应用-常对象和对象常成员
- 后缀求可重叠最长重复子串
- HttpClient学习
- LeetCode OJ刷题历程——Maximum Depth of Binary Tree
- Dubbo高级篇_03_Redis的安装与使用
- 图像处理中一阶微分的等式证明
- Android开发 调用系统相机和加载图片到本地的使用
- lintcode:Sort Colors II
- android studio中R类重复
- zookeeper服务注册