链接:
https://codeforces.com/problemset/problem/1553/B
题意
有两个字符串,第二个字符串是记录第一个字符串从某个位置开始左右移动的过程,看是否第二个字符串是否为第一个字符串的某个记录。(多组案例)
Example
input
6
abcdef
cdedcb
aaa
aaaaa
aab
baaa
ab
b
abcdef
abcdef
ba
baa
output
YES
YES
NO
YES
YES
NO
解析
写个dfs来判断这个字符串是否可行即可
#include <iostream>
#include <string>
using namespace std;
int ans;
void dfs(string a, string b, int i, int j, bool right)
{
if (j == b.length() - 1)
{
ans = 1;
return;
}
if (i - 1 >= 0 && a[i - 1] == b[j + 1])
{
dfs(a, b, i - 1, j + 1, false);
}
if (i + 1 < a.length() && a[i + 1] == b[j + 1] && right)
{
dfs(a, b, i + 1, j + 1, true);
}
}
int main()
{
int _;
cin >> _;
while (_--)
{
bool flag = false;
string s, t;
cin >> s >> t;
for (int i = 0; i < s.size(); i++)
{
ans = 0;
if (s[i] == t[0]) dfs(s, t, i, 0, 1);
if (ans == 1) break;
}
if (ans) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}