B. Reverse String
思路
枚举 t t t 被截断的地方和 s s s 开始识别 t t t 的地方
AC(string, bf)
#include <bits/stdc++.h>
using namespace std;
int main() {
int q;
cin >> q;
while (q -- ) {
string s, t;
cin >> s >> t;
bool OK = 1;
int lent = t.size();
int lens = s.size();
if (OK == 0) continue;
for (int i = 0; i < lent; i ++ ) {
string t1 = t.substr(0, i + 1);
string t2 = t.substr(i + 1);
reverse(t2.begin(), t2.end());
for (int j = i; j < lens; j ++ ) {
string s1 = s.substr(j - i, i + 1);
string s2;
if (j >= t2.size()) s2 = s.substr(j - t2.size(), t2.size());
if (s1 == t1 && s2 == t2) {
OK = 0;
cout << "YES" << endl;
break;
}
}
if (OK == 0) break;
}
if (OK) cout << "NO" << endl;
}
return 0;
}
D.Backspace
思路
- 对于前面的字符我们可以不管,只要输入我们就 b a c k s p a c e backspace backspace ,所以现在我们只考虑 j j j 能不能到 0 0 0, j j j 到 0 0 0 就弹出
- 对于为什么我们
i
−
=
2
i -= 2
i−=2
1.对于开始识别 t t t 开始,我们每个字符都被 b a c k s p a c e backspace backspace 代替,所以相当于每次删去两个字符,如果 t t t 被截断和 t t t 后面缀着东西,都是只能删去 2 2 2 个字符,也就是 i − = 2 i -= 2 i−=2
2.对于未识别 t t t 时,我们可以随意删除,也就是不管他,只要 j j j 能等于 0 0 0 我们就立刻输出 Y E S YES YES
AC(math)
#include <bits/stdc++.h>
using namespace std;
int main() {
int q;
cin >> q;
while (q -- ) {
string s, t;
cin >> s >> t;
int j = t.size();
int i = s.size() - 1;
if (lent > lens) {
cout << "NO" << endl;
continue;
}
while (i >= 0 && j) {
if (t[j - 1] == s[i]) {
j --;
i --;
}
else i -= 2;
}
if (j) cout << "NO" << endl;
else cout << "YES" << endl;
}
return 0;
}