HJ65 查找两个字符串a,b中的最长公共子串 练习

描述

查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。

注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!

数据范围:字符串长度1≤length≤300 1≤length≤300 

进阶:时间复杂度:O(n3) O(n3) ,空间复杂度:O(n) O(n) 

输入描述:

输入两个字符串

输出描述:

返回重复出现的字符

示例1

输入:

abcdefghijklmnop
abcsafjklmnopqrstuvw

输出:

jklmnop

题解

import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        //输入字符串1
        String str1 = sc.nextLine();
        //输入字符串2
        String str2 = sc.nextLine();

        //确定短串
        if(str1.length()>str2.length()){
            String temp = str1;
            str1 = str2;
            str2 = temp;
        }
        //求最长公共子串
        String res = getCommonSubString(str1,str2);
        //输出结果
        System.out.println(res);
    }
    //获取最长公共子串
    public static String getCommonSubString(String str1,String str2){
        String res="";
        //左指针
        int left = 0;
        //右指针
        int right = left+1;
        //当右指针超过短串长度时结束循环
        while(right<=str1.length()){
            //截取短串 左指针到右指针 的子串
            String tmp = str1.substring(left,right);
            //判断是否包含
            if(str2.contains(tmp)){
                //包含 若长度更长替换为最长公共子串
                if(res.length()

你可能感兴趣的:(java,算法)