java-String相关算法题-获取两个字符串中最大相同子串
java-String相关算法题-获取两个字符串中最大相同子串
问题描述
获取两个字符串中最大相同子串
比如:str1=abcwerthelloyuiodef;str2=cvhellobnm
提示:将短的那个串的长度依次递减的子串与较长的串比较
解题思路
要分两种情况进行讨论
情况一:长度相同的最长相同子串只有一个或找到一个就行
情况二:要到长度相同的所有最长子串,不止一个
1.我们将较短的那个子串进行长度递减操作
2.比如cvhellobnm
长度为10:cvhellobnm
长度为9:cvhellobn、vhellobnm
长度为8:cvhellob、vhellobn、hellobnm
…
依次判断较长的字符串是否包含这些子串。包含则找到退出
不包含则长度依次递减
3.情况一二的区别在于一是找到即可,即退出
二则是将同一长度的情况遍历完
java实现
package com.myy.service;
import java.util.Arrays;
/**获取两个字符串中最大相同子串
* 比如:str1=abcwerthelloyuiodef;str2=cvhellobnm
* 提示:将短的那个串的长度依次递减的子串与较长的串比较
* @author myy
* @create 2020-09-07 21:00
*/
public class getlongsub {
public static void main(String[] args) {
String s1="abcwertheloyuiodef";
String s2="cvbheloniodem";
String[] s=getlongsub1(s1,s2);
System.out.println(Arrays.toString(s));
}
//长度一样的最大相同子串只有一个
public static String getlongsub(String str1,String str2) {
if(str1!=null&&str2!=null){
String maxstr = (str1.length() >= str2.length()) ? str1 : str2;
String minstr = (str1.length() < str2.length()) ? str1 : str2;
for (int i = 0; i < minstr.length(); i++) {
for (int t = 0, j = minstr.length() - i; j <= minstr.length(); t++, j++) {
if (maxstr.contains(minstr.substring(t, j))) {
return minstr.substring(t, j);
}
}
}
}
return null;
}
//长度一样的最大相同子串有多个
public static String[] getlongsub1(String str1,String str2) {
if(str1!=null&&str2!=null){
StringBuffer sbuffer=new StringBuffer();
String maxstr = (str1.length() >= str2.length()) ? str1 : str2;
String minstr = (str1.length() < str2.length()) ? str1 : str2;
for (int i = 0; i < minstr.length(); i++) {
for (int t = 0, j = minstr.length() - i; j <= minstr.length(); t++, j++) {
if (maxstr.contains(minstr.substring(t, j))) {
sbuffer.append(minstr.substring(t, j)+",");
}
}
if(sbuffer.length()!=0){
break;
}
}
String[] str=sbuffer.toString().replaceAll(",$","").split(",");
return str;
}
return null;
}
}
版权声明:本文为lm32588原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END