题解 | #最长公共子串#

最长公共子串

https://www.nowcoder.com/practice/f33f5adc55f444baa0e0ca87ad8a6aac

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) {
        int l1 = str1.length();
        int l2 = str2.length();
        int[][] dp = new int[l1 + 1][l2 +
                                     1]; // 利用二维数组记录所有的结果值
        int maxLength = 0; // 最长公共子串的长度
        int maxIndex = 0; // 最长公共子串的末位索引
        for (int i = 1; i <= l1; i++) {
            for (int j = 1; j <= l2; j++) {
                if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
                    dp[i][j] = dp[i - 1][j - 1] + 1; // 当前长度等于前一位长度+1
                    if (dp[i][j] > maxLength) { // 更新最大公共子串长度和索引值
                        maxLength = dp[i][j];
                        maxIndex = i - 1;
                    }
                } else {
                    dp[i][j] = 0;
                }
            }
        }
        return str1.substring(maxIndex - maxLength + 1, maxIndex + 1);
    }
}

全部评论

相关推荐

Aurora23:属于挂一半,暂时进池子了,隔一段时间没有其他组捞的话就彻底结束了
点赞 评论 收藏
分享
ResourceUt...:楼主有自己的垃圾箱,公司也有自己的人才库
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务