zoukankan      html  css  js  c++  java
  • lintcode-79-最长公共子串

    79-最长公共子串

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

    注意事项

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

    样例

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

    挑战

    O(n x m) time and memory.

    标签

    字符串处理 LintCode 版权所有

    思路

    参考博客http://blog.csdn.net/hackbuteer1/article/details/6686931
    与最长公共子序列相似,利用动态规划,动态转移方程为:

    • 如果xi == yj, 则 c[i][j] = c[i-1][j-1]+1
    • 如果xi ! = yj, 那么c[i][j] = 0

    code

    class Solution {
    public:    
        /**
         * @param A, B: Two string.
         * @return: the length of the longest common substring.
         */
        int longestCommonSubstring(string &A, string &B) {
            // write your code here
            int sizeA = A.size(), sizeB = B.size(), i = 0, j = 0;
            int maxLen = 0;
    
            if(sizeA <= 0 || sizeB <= 0) {
                return 0;
            }
    
            vector<vector<int> > dpMatrix;
            dpMatrix.resize(sizeA+1);
            for(i=0; i<=sizeA; i++) {
                dpMatrix[i].resize(sizeB+1);
            }
            for(i=0; i<=sizeA; i++) {
                for(j=0; j<=sizeB; j++) {
                    dpMatrix[i][j] = 0;
                }
            }
    
            for(i=1; i<=sizeA; i++) {
                for(j=1; j<=sizeB; j++) {
                    if(A[i-1] == B[j-1]) {
                        dpMatrix[i][j] = dpMatrix[i-1][j-1] + 1;
                    }
                    else {
                        dpMatrix[i][j] = 0;
                    }
                    maxLen = maxLen >= dpMatrix[i][j] ? maxLen : dpMatrix[i][j];
                }
            }
    
            return maxLen;
        }
    };
    
  • 相关阅读:
    监听器heMQ组合的入门练习
    错误积累
    测试cxf 客户端
    day18-1-17获取界面参数
    Station 项目注意事项
    cxf_spring的结合
    ws_cxf入门 错误
    Oracle游标
    Oracle存储函数,存储过程
    Oracle查询
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7136040.html
Copyright © 2011-2022 走看看