B. Non-Substring Subsequence

题目

题设: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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值