文章
150
粉丝
0
获赞
558
访问
23.2k
#include <bits/stdc++.h>
using namespace std;
// 计算两个字符串的LCS长度(滚动数组优化空间)
int lcsLength(const string& s, const string& t) {
int n = s.length(), m = t.length();
// 滚动数组,只需要两行
vector<int> prev(m + 1, 0), curr(m + 1, 0);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (s[i-1] == t[j-1]) {
curr[j] = prev[j-1] + 1;
} else {
curr[j] = max(prev[j], curr[j-1]);
}
}
swap(prev, curr);
}
return prev[m];
}
int main() {
string S;
int n;
cin >> S; // 文本串S
cin >> n; // 模式串个数
string bestT; // 最优的模式串
int maxLen = -1; // 最大LCS长度
for (int i = 0; i < n; i++) {
string T;
cin >> T;
int len = lcsLength(S, T);
// 更新最优解(题目保证有且仅有一组解,所以>即可)
if (len > maxLen) {
...
登录后发布评论
暂无评论,来抢沙发