BestCoder Round #48 ($) wyh2000 and a string problem

wyh2000 and a string problem

 
 Accepts: 417
 
 Submissions: 767
 Time Limit: 2000/1000 MS (Java/Others)
 
 Memory Limit: 131072/65536 K (Java/Others)
问题描述
青年理论计算机科学家wyh2000在教小学生一些基础的字符串概念。
定义一个字符串
   
   
    
    s
   
   的子序列为将
   
   
    
    s
   
   中一些元素删掉得到的字符串。可以删掉全部元素,可以不删,也可以只删一些。
他还教了小学生如何判断一个串是不是另一个串的子序列。比如给你一个串,要求判断
   
   
    
    wyh
   
   是不是它的子序列,那么你只需要找一个
   
   
    
    w
   
   ,找一个
   
   
    
    y
   
   ,再找一个
   
   
    
    h
   
   ,使得
   
   
    
    w
   
   
   
   
    
    y
   
   前面,
   
   
    
    y
   
   
   
   
    
    h
   
   前面即可。
有一天小学生拿着一个串问他“
   
   
    
    wyh
   
   是不是这个串的子序列?”
但是wyh2000有重度近视眼,如果字符串中有一段连续的
   
   
    
    v
   
   (至少两个),那么他会把它看成一个
   
   
    
    w
   
   。例如,字符串
   
   
    
    vvv
   
   会被看成
   
   
    
    w
   
   ,字符串
   
   
    
    vvwvvv
   
   会被看成
   
   
    
    www
   
   ,字符串
   
   
    
    vwvv
   
   会被看成
   
   
    
    vww
   
   。
请问wyh2000会怎么回答这个问题?
输入描述
第一行为数据组数
   
   
    
    T(1T105)
   
   。
接下来
   
   
    
    T
   
   行,每行一个字符串,表示小学生拿来问wyh2000的串。
总串长不超过3145728。只包含小写字母。
hack数据字符串长度不超过100000。
输出描述
对于每组数据,如果wyh2000会把
   
   
    
    wyh
   
   看成该串的子串,那么输出一行
   
   
    
    Yes
   
   ,否则输出一行
   
   
    
    No
   
   
输入样例
4
woshiyangli
woyeshiyangli
vvuuyeh
vuvuyeh
输出样例
No
Yes
Yes

No

#include<stdio.h>
#include<string.h>
int main()
{
	int t,len1,num,j,len2,k;
	char str1[100001],str2[100001];
	scanf("%d",&t);
	while(t--)
	{
		num=0;
		j=0;
		k=0;
		scanf("%s",str1);
		len1=strlen(str1);
		for(int i=0;i<len1;i++)
		{
			if(str1[i]=='v')
			    num++;
			else
			{
				if(num>=2)
				    str2[j++]='w';
                else 
                    str2[j++]=str1[i];
				num=0; 
			} 
		}
		len2=strlen(str2);
		for(int i=0;i<len2;i++)
		{
			if(str2[i]=='w'&&k==0)
			    k=1;
            if(str2[i]=='y'&&k==1)
                k=2;
            if(str2[i]=='h'&&k==2)
                k=3;
		} 
		if(k==3)
		    printf("Yes\n"); 
        else   
            printf("No\n");
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值