题解:CF523C Name Quest

说明提示

这道题可以找不到串 ss 的,也可以找不到分割点的。

话说应该没有人像我 sstt 打反调了半天的吧。

思路

首先在 tt 最前方找到最前面的子序列,再在最后面找到最后方的子序列,这样在两个子序列间的所有点就都会可以成为合法的分割点,而其他区间的就会因为没有子序列而不合法。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<bits/stdc++.h>
using namespace std;
string s, t;
int main() {
ios_base::sync_with_stdio(false);
int first_end = 0, last_begin = 0;
cin >> s >> t;
string s1 = s, s2 = s;
reverse(s1.begin(), s1.end());
for (int i = 0; i < t.size(); ++i) {
if (t[i] == s1.back()) s1.pop_back();
if (s1.empty()) {
first_end = i;
break;
}
}
for (int i = t.size() - 1; i >= 0; --i) {
if (t[i] == s2.back()) s2.pop_back();
if (s2.empty()) {
last_begin = i;
break;
}
}
if (last_begin - first_end < 0) cout << 0 << endl;
else cout << last_begin - first_end << endl;
return 0;
}

AC 记录


题解:CF523C Name Quest
https://www.lzj-blog.top/2024/08/26/题解:CF523C Name Quest/
作者
lzj
发布于
2024年8月26日
许可协议