查找一个字符串的最长子序列的长度,该字符串是C ++中另一个字符串的子字符串
假设我们有两个字符串X和Y,我们必须找到字符串X的最长子序列的长度,它是序列Y中的子字符串。因此,如果X =“ ABCD”和Y =“ BACDBDCD”,则输出将为3因为“ ACD”是X的最长子序列,它是Y的子串。
在这里,我们将使用动态编程方法来解决此问题。因此,如果X的长度为n,Y的长度为m,则创建顺序为(m + 1)x(n + 1)的DP数组。DP [i,j]的值是X [0…j]的子序列的最大长度,它是Y [0…i]的子串。现在,对于DP的每个单元,如下所示:
对于1到m范围内的i:
当X [i – 1]与Y [j – i]相同时,则DP [i,j]:= 1 + DP [i – 1,j – 1]
否则DP [i,j]:= 1 + DP [i,j – 1]
对于1到n范围内的j
最后,x的最长子序列(即y的子串)的长度为max(DP [i,n]),其中1 <= i <= m。
示例
#include<iostream>#define MAX 100
using namespace std;
int maxSubLength(string x, string y) {
int table[MAX][MAX];
int n = x.length();
int m = y.length();
for (int i = 0; i <= m; i++)
for (int j = 0; j <= n; j++)
table[i][j] = 0;
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (x[j - 1] == y[i - 1])
table[i][j] = 1 + table[i - 1][j - 1];
else
table[i][j] = table[i][j - 1];
}
}
int ans = 0;
for (int i = 1; i <= m; i++)
ans = max(ans, table[i][n]);
return ans;
}
int main() {
string x = "ABCD";
string y = "BACDBDCD";
cout << "Length of Maximum subsequence substring is: " << maxSubLength(x, y);
}
输出结果
Length of Maximum subsequence substring is: 3
以上是 查找一个字符串的最长子序列的长度,该字符串是C ++中另一个字符串的子字符串 的全部内容, 来源链接: utcz.com/z/326998.html