说明提示
这道题可以找不到串 s 的,也可以找不到分割点的。
话说应该没有人像我 s 和 t 打反调了半天的吧。
思路
首先在 t 最前方找到最前面的子序列,再在最后面找到最后方的子序列,这样在两个子序列间的所有点就都会可以成为合法的分割点,而其他区间的就会因为没有子序列而不合法。
代码
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 记录