刷Lintcode最长子串问题

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

样例

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

1.我的想法:

双循环遍历,找出相同的子串,设置临时变量tmp记录字串长度,将tmp保存在数组中,最后在数组中找最大值。

2.需要解决的问题:

什么时候将tmp放入数组中呢? 我的想法是当A,B符号串的下一个符号不相等时,或者A,B符号串其中之一遍历到头了,这个时候将其放入。

3.遇到的困难,

针对2.我写了if判断语句,但是最后编译有问题。思来想去并不知道哪里出了错。

4.答案:

答案的思路与1.相似,只是他使用了一个矩阵,用(i-1,j-1)代表A[i-1] B[j-1]的状态。算法是如果两者相等,则(i-1,j-1)的值等于(i-2,j-2)的值加一,否则为0;这样做很巧妙,最后只需要在矩阵中找出最大值就可以了。它避免了我2.中需要判断何时存入值的问题。

5.启示:

1.可以加构一个新的数据结构来存储有用的信息,2.累积计算的思想避免了人为的择时,3.从后往前判断比从前往后判断有优势:避免了可能的溢出。参考动态规划的思想。

你可能感兴趣的:(刷Lintcode最长子串问题)