给定两个字符串s和t,判断s是否是t的子序列。即从t中删除一些字符,将剩余的字符连接起来,即可获得s。
输入格式:
输入文件包括多组测试数据,每组测试数据占一行,包括两个由ASCII码组成的字符串s和t,它们的长度都不超过100000。
输出格式:
对于每个测试数据输出一行,如果s是t的子序列,则输出“Yes”,否则输出“No”。
输入样例:
sequence subsequence
person compression
VERDI vivaVittorioEmanueleReDiItalia
caseDoesMatter CaseDoesMatter
输出样例:
Yes
No
Yes
No
代码(注意循环限制条件是i与j均小于各自字符串的长度,这样才能保证在长字符串已经数一遍后,短字符串还没有数完,这也作为判断条件,如果长字符串数完后短字符串也数完了那么是yes,否则是no)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char s[100000],t[100000];
int i,j;
while(scanf("%s %s",s,t)!=EOF){//s是短字符,t是长字符
for(i=0,j=0;i<strlen(s)&&j<strlen(t);){
if(s[i]==t[j]){
j++;
i++;
}
else j++;
}
if(i==strlen(s)) printf("Yes\n");//短字符串数完了输出yes
else printf("No\n");//没数完输出no
}
return 0;
}