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(1≤T≤105) 。 接下来 T 行,每行一个字符串,表示小学生拿来问wyh2000的串。 总串长不超过3145728。只包含小写字母。 hack数据字符串长度不超过100000。
输出描述
对于每组数据,如果wyh2000会把 wyh 看成该串的子串,那么输出一行 Yes ,否则输出一行 No 。
输入样例
4 woshiyangli woyeshiyangli vvuuyeh vuvuyeh
输出样例
No Yes YesNo
#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; }