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;
}
如有问题敬请指正
博客内容涉及一个字符串处理的问题,给定两个字符串a和b,判断能否通过从a中选取一段,先向右截取再向左截取,使得结果与b相同。博主提供了AC代码,主要使用了C++的substr函数进行子串截取,并通过暴力枚举实现匹配检查。此问题虽然被标记为DP和Hash,但实际解决方案并不涉及这些技术。
1415

被折叠的 条评论
为什么被折叠?



