• 欢迎光临~

POJ-1458 Common Subsequence

开发技术 开发技术 2022-12-21 次浏览

POJ-1458 Common Subsequence

题意:

首先对最长子序列有个定义:如果一个字符串a可以由另一个字符串b删去某些元素得到,那么说明a就是b的子序列字符串
现在有两个字符串,请问最长公共子序列是多长?

思路:

状态定义?

需要知道当前两个字符串比较到哪里了 (Rightarrow) 定义 (f[i][j]) 字符串 (a) 遍历到第 (i) 个点,字符串 (b) 遍历到第 (j) 个点时,该状态的最长公共子序列是多长。

POJ-1458 Common Subsequence

实现:

#include <cstdio>
#include <algorithm>
#include <string>
#include <iostream>
using namespace std;
const int N = 1e3 + 5;
int f[N][N];
int main()
{
    string a, b;
    while (cin >> a >> b)
    {
        a = '0' + a, b = '0' + b;
        for (int i = 1; i < a.size(); i++)
            for (int j = 1; j < b.size(); j++)
                f[i][j] = 0;

        for (int i = 1; i < a.size(); i++)
            for (int j = 1; j < b.size(); j++)
            {
                if (a[i] == b[j])
                    f[i][j] = f[i - 1][j - 1] + 1;
                else
                    f[i][j] = max(f[i - 1][j], f[i][j - 1]);
            }

        printf("%dn", f[a.size() - 1][b.size() - 1]);
    }
    return 0;
}
程序员灯塔
转载请注明原文链接:POJ-1458 Common Subsequence
喜欢 (0)