牛客练习赛51 B 子串查询 https://ac.nowcoder.com/acm/contest/1083/B
题目描述
输入描述:
第一行两个数n,q。1<=n,q<=1e5。 第二行一个长度为n的字符串s,所有字符都为小写拉丁字符。 接下来q行每行一个字符串t。1<=|t|<=50。
输出描述:
对于每个查询,如果t是s的字串,输出”YES”,否则输出”NO”。每个答案占一行。
输出
YES
NO
YES
YES ac代码:
方法一:
#include<bits/stdc++.h>using namespace std;int n,q,i,pos,f;string s,a;int main(){ cin>>n>>q>>s; while(q--){ cin>>a; pos=0; f=1; for(int i=0;i<a.length()&&f;i++){ auto it = s.find(a[i],pos); if(it==s.npos) f=0; else pos = it+1;//要查找下一个,所以+1 } if(f) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0;}| 方法原型 | 描述 |
|---|---|
| size_type find(const string & str, size_type pos = 0) const | 从字符串的pos位置开始,查找子字符串str。如果找到,则返回该子字符串首次出现时其首字符的索引;否则,返回string::npos |
| size_type find(const char * s, size_type pos = 0) const | 从字符串的pos位置开始,查找子字符串s。如果找到,则返回该子字符串首次出现时其首字符的索引;否则,返回string::npos |
| size_type find(const char * s, size_type pos = 0, size_type n) const | 从字符串的pos位置开始,查找s的前n个字符组成的子字符串。如果找到,则返回该子字符串首次出现时其首字符的索引;否则,返回string::npos |
| size_type find(const char ch, size_type pos = 0) const | 从字符串的pos位置开始,查找字符ch。如果找到,则返回该子字符串首次出现的位置;否则,返回string::npos |
#include<bits/stdc++.h>
using namespace std;
int N,Q,a[30],n[30],b[100005][30];
string s;
int main(){
cin>>N>>Q;
cin>>s;
int len = s.length();
memset(n,-1,sizeof(n));
for(int i = len-1;i>=0;i--){
int x = s[i]-'a';//相当于把字符转换为数字a就是0,b就是1,以此类推
for(int j=0;j<26;j++){
b[i][j] = n[j];
}
n[x] = i;
}
for(int i=1;i<=Q;i++){
string q;
cin>>q;
int cg = q.size();//这里我用q.length()就会超时;
int iq = 0,is,cnt = 0;
while(iq<len&&cnt<cg){
if(cnt==0) iq = n[q[0]-'a'];
else{
if(b[iq][q[cnt]-'a']!=-1)
iq = b[iq][q[cnt]-'a'];
else
break;
}
cnt++;
}
if(cnt == cg) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
a b a b c b a a
a b a c
b[7][0 - 25]= -1; n[0]=7;
b[6][0] = 7;b[6][1-25]=-1; n[0]=6;
b[5][0]=6,b[5][1-25]=-1; n[1] = 5;
b[4][0]=6,b[4][1]=5,b[4][2-25]=-1; n[2] = 4;
//当遍历到c时,b[4][0]记录的是最先的a(0代表a)的位置,b[4][1]记录的是最先的b的位置
...
i从后往前是为了统计当从这个字母开始(不包括这个字母)后面的字母的位置,n中0就代表a,1就代表b,
然后这样就可以统计记录整个表的情况,如果是i从前遍历就不能做到
下面判断当cnt==0时要单独拿出来,就是因为当遍历到这个字母时,统计是不包括这个字母的。
b有len层,相当于在跳层的验证是否这个位置是存了数的,如果是-1就相当于没有这个数,就跳出循环输出NO。
牛客练习赛51 B 子串查询 https://ac.nowcoder.com/acm/contest/1083/B的更多相关文章
- 牛客练习赛51 C 勾股定理https://ac.nowcoder.com/acm/contest/1083/C
题目描述 给出直角三角形其中一条边的长度n,你的任务是构造剩下的两条边,使这三条边能构成一个直角三角形. 输入描述: 一个整数n. 输出描述: 另外两条边b,c.答案不唯一,只要输出任意一组即为合理, ...
- 牛客练习赛51 **E-数列** (二分,贪心,构造)
牛客练习赛51 E-数列 链接:https://ac.nowcoder.com/acm/contest/1083/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...
- 牛客练习赛51 D题
链接:https://ac.nowcoder.com/acm/contest/1083/D来源:牛客网 有一个草原可以用一个1~400的数轴表示.有n头羊和q个查询.每头羊的编号分别是1,2,3…n. ...
- 牛客练习赛51 C 勾股定理 (数学,结论)
链接:https://ac.nowcoder.com/acm/contest/1083/C来源:牛客网 题目描述 给出直角三角形其中一条边的长度n,你的任务是构造剩下的两条边,使这三条边能构成一个直角 ...
- 牛客练习赛51 C 勾股定理
链接:https://ac.nowcoder.com/acm/contest/1083/C 题目描述 给出直角三角形其中一条边的长度n,你的任务是构造剩下的两条边,使这三条边能构成一个直角三角形. 输 ...
- 牛客-https://www.nowcoder.com/acm/contest/96/H
链接:https://www.nowcoder.com/acm/contest/96/H来源:牛客网 题目描述 今天qwb要参加一个数学考试,这套试卷一共有n道题,每道题qwb能获得的分数为ai,qw ...
- 牛客练习赛51 A abc
A. abc 题意: 给出一个字符串s,你需要做的是统计s中子串”abc”的个数.子串的定义就是存在任意下标a<b<c,那么”s[a]s[b]s[c]”就构成s的一个子串.如”abc”的子 ...
- 牛客练习赛52 B题【树状数组维护区间和{查询区间和,如果区间元素重复出现则计数一次}】补题ing
[题目] 查询区间和,如果区间元素重复出现则计数一次. 链接:https://ac.nowcoder.com/acm/contest/1084/B [题解] 将询问按r排序,维护每个数最后出现的位置, ...
- 牛客练习赛33 E tokitsukaze and Similar String (字符串哈希hash)
链接:https://ac.nowcoder.com/acm/contest/308/E 来源:牛客网 tokitsukaze and Similar String 时间限制:C/C++ 2秒,其他语 ...
随机推荐
- python学习笔记:函数
一.函数是什么 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序),在Pasca ...
- Money
/** * www.yiji.com Inc. * Copyright (c) 2012 All Rights Reserved. */package com.yjf.common.lang.util ...
- 发布 Vant - 高效的 Vue 组件库,再造一个有赞移动商城也不在话下
发布 Vant - 高效的 Vue 组件库,再造一个有赞移动商城也不在话下:https://segmentfault.com/a/1190000011377961 vantUI框架在vue项目中的应用 ...
- 301重定向将不带www的域名跳转到www的域名,403 Forbidden You don’t have permission to access the URL on this server
博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/11/14/301%e9%87%8d%e5%ae%9a%e5%90%91%e5%b0%86% ...
- Java中创建String的两道面试题及详解
我们知道创建一个String类型的变量一般有以下两种方法: String str1 = "abcd"; String str2 = new String("abcd&qu ...
- python-模块-包
一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编 ...
- Vue.js 入门:从零开始做一个极简 To-Do 应用
Vue.js 入门:从零开始做一个极简 To-Do 应用 写作时间:2019-12-10版本信息:Vue.js 2.6.10官网文档:https://cn.vuejs.org/ 前言 学习 Vue ...
- 使用MySQL Workbench查询超时的错误
MySQL Workbench是MySQL提供的连接工具,一直在用它.但是今天运行了一个SQL缺报出如下的错误: errcode 2013 lost connection to mysql serve ...
- wdcp后台登陆访问失败处理方法
用putty或xsheel链接 进入之后输入命令 service wdcp restart 之后显示ok就成功了
- tee - 从标准输入写往文件和标准输出
总览 (SYNOPSIS) tee [OPTION]... [FILE]... 描述 (DESCRIPTION) 把 标准输入 的 数据 复制到 每一个 文件 FILE, 同时 送往 标准输出. -a ...