题设:t个用例,输入字符串长度n,查询次数q,和字符串s。每次查询输入两个数L,R,代表待检测的字符串为母串的[ L , R ]区间内元素。定义查询规则:查询母串中是否存在长度大于2且不连续的子串,与带检测字符串相等,存在输出Yes,反之No。
思路:在带检测子串的左右两段遍历查询是否存在s[ L ]和s[ R ]即可。即遍历母串的[ 1 , L-1 ]中是否存在待检测串的首元素。或者[ R+1 , n ]中是否存在待检测串的尾元素。
既然是从整个序列s中找 与区间[l,r]序列相同 但找到的序列之间不连续
#include<bits/stdc++.h>
using namespace std;
int T,n,q;
int main(){
cin>>T;
while(T--)
{
string s;
int l,r;
cin >> n >> q >> s;
s=" "+s;
while(q--)
{
cin>>l>>r;
bool flag=0;
for(int i=1;i<l;i++)
if(s[i]==s[l]) flag=1;//在区间之前找 找到就对
for(int i=r+1;i<=n;i++)//在区间之后找 找到就对
if(s[i]==s[r]) flag=1;
//两个for循环遍历并不是让两边都找到 而是其中一方找到即有答案 是或的关系
if(flag)puts("YES");
else puts("NO");
}
}
return 0;
}