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
< <上一篇
下一篇>>