题解:P12597 穿睡衣军训
一句话题解:
考虑枚举答案串在
更细致的题解:
考虑枚举
具体的,考虑把
这样我们需要维护出
进一步的,对于
所以枚举
#include <bits/stdc++.h>
int main() {
int T;
for (std::cin >> T; T; --T) {
std::string s, t;
std::cin >> s >> t;
t = " " + t;
std::vector f(t.size() + 1, std::vector<int>(26, -1));
for (int i = t.size() - 1; i; --i) {
f[i - 1] = f[i];
f[i - 1][t[i] - 'a'] = i;
}
std::string ans;
for (int i = 0; i < s.size(); ++i) {
int j = i, p = 0;
while (j < s.size()) {
int ch = s[j] - 'a';
if (f[p][ch] == -1) break;
p = f[p][ch];
++j;
}
int len = j - i;
if (len > ans.length()) {
ans = s.substr(i, len);
} else if (len == ans.length()) {
auto cur = s.substr(i, len);
if (cur < ans) ans = cur;
}
}
std::cout << ans << std::endl;
}
}