> Description
设有A、B两个字符串,找出A、B共同子串,每个字符串无相同字符,可以不连续,但顺序不能颠倒。
> Input
第一行字符串A
第二行字符串B
> Output
最长公共子串的长度。
> Sample Input
abcfbc
abfcab
> Sample Output
4
> 解题思路
什么都别说了,先上表:
|a | b | c | f | b | c (j)
a |1 //当i与j相等时,f[i][j]为f[i-1][j-1]+1;
b | //否则取f[i-1][j]与f[i][j-1]中的大数
f |
c |
a |
b |
(i)
也就是说1为在序列中多加一个数,2为不选择i
然后下面我没有用二维是因为内存太大了,按照算式,只需要用到当前行和上一行,所以我就用f1和f来定义。
> 代码
#include<iostream>
#include<cstdio>
#include<string>
#include<cmath>
using namespace std