一、题目
题目描述
给定两个字符串 s 和 t,请判断 s 是否是 t 的子序列。即从 t 中删除一些字符,将剩余的字符连接起来,即可获得 s。
输入描述
包括若干组测试数据。每组测试数据由两个 ASCII 码的数字和字母串 s 和 t 组成, s 和 t 的长度不超过 100000。
输出描述
对每组测试数据,如果 s 是 t 的子序列则输出 Yes;,否则输出 No。
样例输入
sequence subsequence
person compression
caseDoesMatter CaseDoesMatter
样例输出
Yes
No
No
二、代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
char s[100000],t[100000],*b,*a;//b指针指向s,a指针指向t
while(~scanf("%s %s",&s,&t))
{
b=s;
a=t;
while(*a!='\0'&&*b!='\0')
{
if(*a==*b)
{
a++;
b++;
}
if(*a!=*b)
{
a++;
}
}
if(*b=='\0')
{
printf("Yes\n");
}
if(*b!='\0')
{
printf("No\n");
}
}
}
三、summary&experience
这次的题目思路非常简单。提几个写代码时需要注意的地方:
1、比较字符是否相等时不能直接拿指针去比较,要用指针所指的对象去比较,*指针
。
2、与之区分的是指针往后移动一位时不需要*
指向任何人,而是指针自己++,表示指针后移一位。
3、表示空的符号是反斜杠 反斜杠 反斜杠零!'\0'
不是'/0'
。反斜杠 反斜杠 反斜杠!!!