求最长公共子序列长度 LCS
问题描述:
给定两个字符串s1和s2(长度均不超过1000),求出这两个字符串的最大公共子串的长度。
以下是代码及分析:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
// 给定两个字符串s1和s2(长度均不超过1000),求出这两个字符串的最大公共子串的长度。
//
//【分析】情境类似求最长公共子序列长度问题,不过需要注意的是:所求子串中的字符需要在串s1和串s2中连续出现。
//
// 例:s1=”abcad”
//
// s2=”abd”
//
// 它们的最长公共子序列长度为3(”abd”),而最大公共子串长度为2(”ab”)。
//
// 因此,定义dp[i][j]:串s1的前i个字符 和 串s2的前j个字符的最大公共子串长度,则s1…si+1和t1…tj+1对应的公共子串可能是:
//
<