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.