文章

150

粉丝

0

获赞

558

访问

23.2k

头像
子序列 题解:
P1895 南京大学机试
发布于2026年2月14日 16:07
阅读数 82

#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) {
           ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发