Lintcode—(5)最长公共子串

来源:互联网 发布:originlab mac 编辑:程序博客网 时间:2024/05/01 19:53

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


 注意事项

子串的字符应该连续的出现在原字符串中,这与子序


样例

给出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) {        // write your code here                int n = A.length();          int m = B.length();          int num = 0;          int[][] dp = new int[n + 1][m + 1]; // ///不赋值时的初始值为0            for (int i = 1; i <= n; i++) {              char c1 = A.charAt(i - 1);              for (int j = 1; j <= m; j++) {                  char c2 = B.charAt(j - 1);                  if (c1 == c2) {                      dp[i][j] = dp[i - 1][j - 1] + 1;  //出现一个公共字符就加1                  } else {                        dp[i][j] = 0;                  }                  num = Math.max(num, dp[i][j]);              }              //return num;  /////for循环结束后才return          }          return num;             }}

解题思路:

比较A和B中相同的字符,如果有相同的字符,数组dp增加一个元素并值相对前一位元素加1(没有元素时为0)。









0 0
原创粉丝点击