题目描述:
找出两个字符串的最长公共子串
代码如下:
class Solution {
private:
vector< vector<int> > f;
public:
int longestSubstring(string x, string y) {
int res, n, m, i, j;
n = x.length();
m = y.length();
f.resize(n + 1);
for (i=0; i<=n; i++)
f[i].resize(m + 1);
res = 0;
for (i=0; i<=n; i++)
for (j=0; j<=m; j++) {
if (i == 0 || j == 0 || x[i-1] != y[j-1]) f[i][j] = 0;
else f[i][j] = f[i-1][j-1] + 1;
if (f[i][j] > res) res = f[i][j];
}
return res;
}
};
代码解析:
参考的是别人的代码, f[i][j]表示的是x字符串以i结尾,y字符串以j结尾的公共子串长度(子串必须包含i和j)。所以两者不等则为0。相等则为以i-1和j-1结尾的子串长度加1。遍历可得到所有组合,将最大值提取出来即可。