最长公共子串

描述

给定两个字符串str1和str2,输出两个字符串的最长公共子串
题目保证str1和str2的最长公共子串存在且唯一。 
 
数据范围: 1 \le |str1|,|str2| \le 50001str1,str25000
要求: 空间复杂度 O(n^2)O(n2),时间复杂度 O(n^2)O(n2)

示例1

输入:
"1AB2345CD","12345EF"
返回值:
"2345"
 
 
import java.util.*;


public class Solution {
    /**
     * longest common substring
     * @param str1 string字符串 the string
     * @param str2 string字符串 the string
     * @return string字符串
     */
    public String LCS (String str1, String str2) {
        // write code here
        int len1 = str1.length();
        int len2 = str2.length();
        String commonStr = "";
        int commonLen = 0;
        for(int i=0; i<len1; i++){
            char temp = str1.charAt(i);
            if(commonLen>(len1-i)){
                return commonStr;
            }
            for(int j=0; j<len2;j++){
                int tmpCommonLen = 0;
                String tmpCommonStr = "";
                int k1 = i;
                int k2 = j;
                while(k1<len1&&k2<len2&&str1.charAt(k1)==str2.charAt(k2)){
                    tmpCommonLen ++;
                    tmpCommonStr += str1.charAt(k1);
                    k1++;
                    k2++;
                }
                if(commonLen<tmpCommonLen){
                    commonLen = tmpCommonLen;
                    commonStr = tmpCommonStr;
                }
            }
            
        }
        return commonStr;
    }
}
 
posted @ 2022-12-02 11:19  northli  阅读(19)  评论(0编辑  收藏  举报