记得存档

实验任务

小光头找到小菇凉后发现他们被困在一个奇怪里结界里找不到原来的路回家去了,于是小光头打算带着小菇凉往森林深处走去寻找一条新的道路。在森林入口,他们发现了一块石壁,上面有一些奇怪的符号,写的是如果解除封印就能存档,即使在森林里遭遇不测也可以重新来过(红豆泥?o_O?!)。

解除封印需要在一串字符串中找出是否包含另一个串的子序列。如果包含则这个封印可以解除,否则则不可以解除。

数据输入

输入有多组数据,每组包含两个字符串 t 和 s,字符串长度不超过 100000。

数据输出

输出若字符串 s 包含一个子序列 s’与 t 相同,则输出 Yes,否则输出 No。

输入示例

sequence subsequence
person compression
VERDI vivaVittorioEmanueleReDiItalia
caseDoesMatter CaseDoesMatter

输出示例

Yes
No
Yes
No

解题思路

对于t中每个元素t[i],按顺序查找是否有s[j] == t[i].若相等的次数等于t中元素的个数,则说明存在s’

参考代码

#include <stdio.h>
#include <string.h>
const int maxn = 100010;
char t[maxn],s[maxn];
bool find ();
int main()
{
    while (~scanf("%s %s",t,s))
        printf("%s\n",find()?"Yes":"No");
    return 0;
}
bool find (){
    int len1 = strlen(t),len2 = strlen(s);
    bool flag;
    int cnt = 0,pos = 0;
    int i,j;
    for (i = 0;i < len1;i++){
        for (j = pos;j < len2;j++)
            if (t[i] == s[j]){
                cnt++;
                break;
            }
        pos = j;            
    }
    return (cnt == len1?true:false);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值