https://codeforces.com/contest/1553/problem/B
INPUT
6
abcdef
cdedcb
aaa
aaaaa
aab
baaa
ab
b
abcdef
abcdef
ba
baa
OUTPUT
YES
YES
NO
YES
YES
NO
题意
给T,T组数据,每组数据中有两个字符串a,b ,可以从a中某个位置先向右截取一段(可为0),再向左截取一段(可为0)(注:由右向左截取时候字符串反向),截取出来的部分是否能和b相等。
例如
a = abcdef
b = cdedcb
选取a的节点为c,向右截取了 ‘de’ 得到 ‘cde’,再向左截取 ‘dcb’ 最终得到和b相同的串,输出yes,反之得不到的就输出no
做法
纯暴力比对,但前提懂得substr(复制一段特定长度的串 )就方便很多
看代码就懂了,制作出每一个向右形成的子串,再构造向左的子串,最后一一比对。
(我也不知道为啥题目tag写着dp 和 hash…)
substr使用
AC代码
#include<bits/stdc++.h>
using namespace std;
string a,b;
int n;
int main()
{
int T;cin>>T;
while(T--)
{
cin>>a>>b;
n = a.length();
bool fl = false; //找到则终止循环程序
for(int i = 0;i<n;i++)
{
string q = "";
for(int j = i;j<n;j++)
{
q = a.substr(i,j - i + 1);
for(int k = j;k >= 0;k--)
{
if(k != j) q += a[k];
if(q == b) fl = true;
if(fl) break;
}
if(fl) break;
}
if(fl) break;
}
if(fl) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
return 0;
}
如有问题敬请指正