LintCode 最长公共子串

给出两个字符串,找到最长公共子串,并返回其长度。

注意事项

子串的字符应该连续的出现在原字符串中,这与子序列有所不同。

样例
给出A=“ABCD”,B=“CBCE”,返回 2

代码

public class Solution {
    /**
     * @param A, B: Two string.
     * @return: the length of the longest common substring.
     */
    public int longestCommonSubstring(String A, String B) {
        // state: f[i][j] is the length of the longest lcs
        // ended with A[i - 1] & B[j - 1] in A[0..i-1] & B[0..j-1]
        int n = A.length();
        int m = B.length();
        int[][] f = new int[n + 1][m + 1];
        
        // initialize: f[i][j] is 0 by default
        
        // function: f[i][j] = f[i - 1][j - 1] + 1 or 0
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (A.charAt(i - 1) == B.charAt(j - 1)) {
                    f[i][j] = f[i - 1][j - 1] + 1;
                } else {
                    f[i][j] = 0;
                }
            }
        }
        
        // answer: max{f[i][j]}
        int max = 0;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                max = Math.max(max, f[i][j]);
            }
        }
        
        return max;
    }
}

推荐阅读更多精彩内容

  • 给出两个字符串,找到最长公共子串,并返回其长度。注意事项子串的字符应该连续的出现在原字符串中,这与子序列有所不同。...
    yzawyx0220阅读 410评论 0 1
  • 3.10 69.给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 二叉树的层次遍历样例给一棵二叉树 {3...
    mytac阅读 849评论 3 3
  • 给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。说明最长公共子序列的定义: 最长公共子序列问题是在...
    yzawyx0220阅读 250评论 0 1
  • 题目 给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。 说明最长公共子序列的定义: 最长公共子序列...
    六尺帐篷阅读 304评论 0 1
  • 第15|心安的安 现在的你,过得好吗?有没有女朋友? 【1】 我替奶牛向你问声好,即使你听不到,也可能没机会看到。...
    心安的安阅读 109评论 0 0
  • 二O一六年六月十四日,中科院对外发布《中国宜居城市研究报告》显示,昆明宜居指数在全国四十个城市中位居第二。 昆明,...
    老蒋带你去旅行阅读 181评论 0 0
  • 今日轮值,一人感觉无聊,便发消息给以前老友问有无时间来档口喝茶,老友回复在广州开会,暂时没空,感觉很忙的样子。于是...
    萧看风云阅读 96评论 0 1
  • 我看着这繁华夜里清晰地路灯 台风吹走了迷雾 雨水冲刷了尘土 在这灯的远处 蜿蜒如蛇,迎来了一列移动的长灯 载着归人...
    windmilllan阅读 744评论 0 0
  • 天刚蒙蒙亮,便被敲门声吵醒,迷迷糊糊开了房门,带着略微抱怨的心态<谁啊!一大早过来。>揉了揉眼睛仔细看人<八爷,佛...
    无灬视阅读 478评论 2 1