链接:
https://codeforces.com/problemset/problem/1553/B
题意:
给一个字符串s,从第x个字符开始先向右读a个字符,再向左读b个字符,判断是否可以组成字符t。
本题可以直接用dfs遍历所有的情况,如果出现可以组成字符t的情况,就返回true。
代码如下:
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
typedef long long ll;
string s, t;
bool f;
void dfs(int position, string res, bool dir) {//true向右
if(f || res.size() > s.size()){
return;
}
if (dir) {
for (int i = position; i < s.size(); i++) {
res += s[i];
if (res == t) {
f = true;
break;
}
dfs(i - 1, res, false);
}
}
else {
for (int i = position; i >= 0; i--) {
res += s[i];
if (res == t) {
f = true;
break;
}
}
}
}
int main() {
int T;
cin >> T;
while (T--) {
cin >> s >> t;
f = false;
for (int i = 0; i < s.size(); i++) {
dfs(i, "", true);
if (f) {
break;
}
}
if (f) {
cout << "YES";
}
else {
cout << "NO";
}
cout << endl;
}
}