来源:牛客网
有两个字符串s 和t,如果即从s 中删除一些字符,将剩余的字符连接起来,即可获得t。则称t是s 的子序列。
请你开发一个程序,判断t是否是s的子序列。
输入描述:
输入包含多组数据,每组数据包含两个字符串s和t。 它们都由数字和字母组成,且长度小于100000。
输出描述:
对应每一组输入,如果t是s的子序列,则输出“Yes”;否则输出“No”。
示例1
输入
ABC ABC ABC AB ABC DE
输出
Yes Yes No
思路:按顺序从s字符串中找t字符串中的字符,当t字符串中出现s字符串中没有的字符时,输出No,找到s字符串结束或者t字符串结束就可以了。
看到这个题目的第一反应时最长公共子序列的做法,然后判断最长公共子序列是不是t,后面一想似乎直接比较就好了,用dp似乎会很麻烦,而且数组也开不鸟那么大············
代码:
#include<stdio.h>
#include<string.h>
int main()
{
char s[100005],t[100005];
while(~scanf("%s %s",s,t))
{
int i,j=0,ls=strlen(s),lt=strlen(t);
for(i=0; i<lt; i++)
{
for(j; j<ls; j++)
{
if(t[i]==s[j])
{
j++;
break ;
}
}
if(i==lt-1||j==ls)
break ;
}
if(i==lt-1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}