列表

详情


WY12. 藏宝图

描述

牛牛拿到了一个藏宝图,顺着藏宝图的指示,牛牛发现了一个藏宝盒,藏宝盒上有一个机关,机关每次会显示两个字符串 s 和 t,根据古老的传说,牛牛需要每次都回答 t 是否是 s 的子序列。注意,子序列不要求在原字符串中是连续的,例如串 abc,它的子序列就有 {空串, a, b, c, ab, ac, bc, abc} 8 种。

输入描述

每个输入包含一个测试用例。每个测试用例包含两行长度不超过 10 的不包含空格的可见 ASCII 字符串。

输出描述

输出一行 “Yes” 或者 “No” 表示结果。

示例1

输入:

nowcodecom
ooo

输出:

Yes

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2018-08-06

#include <stdio.h>

int chazhao(char a[30],char c,int begin,int end){
    int i = 0;
    for(i = begin;i<=end;i++){
        if(a[i] == c){
            return i+1;
        }
    }
    return -1;
}
 int main()
 {
     int al,bl;
     char a[30],b[30];
     int begin = 0;
     int i = 0;
     int flag = 0;
     al = 0;
     bl = 0;
     
     scanf("%c",&a[al]);
     while(a[al] != '\n'){
         al++;
         scanf("%c",&a[al]);
     }
     scanf("%c",&b[bl]);
     while(b[bl] != '\n'){
         bl++;
         scanf("%c",&b[bl]);
     }
     
     while(i <= bl){
         if((begin = chazhao(a,b[i],begin,al)) == -1){
             printf("No");
             flag = 1;
             break;
         }
         i++;
     }
     if(flag == 0)
         printf("Yes");
 }

C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-08-25

#include <stdio.h>

int search(char s[30],char ch,int begin,int end){
    int i = 0;
    for(i = begin;i<=end;i++){
        if(s[i] == ch){
            return i+1;
        }
    }
    return -1;
}
 int main()
 {
    
     char s[30],t[30];
     int begin = 0;
     int i = 0;
     int flag = 0;
     scanf("%s\n%s",s,t);
 /*    scanf("%c",&a[al]);
     while(a[al] != '\n'){
         al++;
         scanf("%c",&a[al]);
     }
     scanf("%c",&b[bl]);
     while(b[bl] != '\n'){
         bl++;
         scanf("%c",&b[bl]);
     }
 */    
     while(i <= strlen(t)){
         if((begin = search(s,t[i],begin,strlen(s))) == -1){
             printf("No");
             flag = 1;
             break;
         }
         i++;
     }
     if(flag == 0)
     {
         printf("Yes");
     }
 }

C 解法, 执行用时: 2ms, 内存消耗: 224KB, 提交时间: 2018-11-28

#include    <stdio.h>
 
int main()
     
{
    char t[50];
    char s[50];
    int count = -1;
    int  j = 0;
     
    gets(s);
    gets(t);
     
     
    for(int i=0; i<strlen(t); i++)
    {
        for(j=(count+1); j<strlen(s); j++)
        {
            if(t[i] == s[j])
            {
                count = j;
                break;
            }
        }
        if(j == strlen(s))
        {
            printf("No \n");
            return 0;
        }
    }
    printf("Yes \n");
    
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 228KB, 提交时间: 2018-11-28

#include<stdio.h>
int main()
{
    int x=0;
    char a[11],b[11];
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    scanf("%s %s",a,b);
    for (int i=0;i<strlen(a);i++)
    {
        if (a[i]==b[x])
        x++;
        if (x==strlen(b))
        break;
    }
    if (x==strlen(b))
    printf("Yes");
    else
    printf("No");
}

Pascal 解法, 执行用时: 2ms, 内存消耗: 256KB, 提交时间: 2018-09-08

var
    s,t:string;
    i,j,l1,l2:longint;
begin
    readln(s); l1:=length(s);
    readln(t); l2:=length(t);
    j:=1;
    for i:=1 to l1 do
        if s[i]=t[j] then inc(j);
    if j=l2+1 then writeln('Yes')
    else writeln('No');
end.

上一题