AcWing 3692. 最长连续公共子序列
原题链接
简单
作者:
momio
,
2025-04-22 09:37:01
· 上海
,
所有人可见
,
阅读 1
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <map>
#include <vector>
using namespace std;
string s1, s2, ans;
int res;
unordered_map<char, vector<int> > h;
int main()
{
cin >> s1 >> s2;
for (int i = 0; i < s2.size(); i ++)
if (h.find(s2[i]) == h.end()) h[s2[i]] = {i};
else h[s2[i]].push_back(i);
for (int i = 0; i < s1.size(); i ++)
{
while (h.find(s1[i]) == h.end()) i ++;
if (i >= s1.size()) break;
for (int k : h[s1[i]])
{
int a = 0;
string tmp = "";
for (int j = k; j < s2.size(); j ++)
{
if (s1[i + j - k] == s2[j]){
a ++;
tmp.push_back(s2[j]);
}
else{
res = max(res, a);
if (res <= a) ans = tmp;
break;
}
}
}
}
cout << res << endl << ans << endl;
return 0;
}