UVa10340 - All in All 题解
题目
题目链接
题目大意
字符串s通过在s的字符之间插入某些字符来进行加密,加密后形成字符串t。请写一个程序判断字符串t是不是字符串s加密后形成的。
输入字符串s和t, 中间用空格隔开。输入由EOF终止。
输出Yes或者No来判断。
输入样例
sequence subsequence
person compression
VERDI vivaVittorioEmanueleReDiItalia
caseDoesMatter CaseDoesMatter
输出样例
Yes
No
Yes
No
题解
整体思想为遍历字符串t,然后检测从t[i]开始是否能与s[0]对得上。
如果对得上就检测t[i]后面的有没有字符能与s[1]对得上。
如果对得上就检测这之后有没有字符能与s[2]对得上……这样循环下去。具体实现看代码吧。
Then show the code.
#include <stdio.h>
#include <string.h>
//开大点 防止被爆掉
char s[100000], t[100000];
int main(){
int flag, tLen, sLen;
while(scanf("%s", s) != EOF){
scanf("%s", t);
flag = 0;
tLen = strlen(t);
sLen = strlen(s);
//从0开始遍历字符串t
for(int i=0; i<tLen; i++){
for(int j=0, k=0; j<sLen && i+k<tLen; k++){
//j代表现在检查的s字符串的下标
//i+k代表现在检查的t字符串的下标
if(s[j] == t[i+k]){
j++;
if(j == sLen){
flag = 1;
break;
}
}
}
if(flag) break;
}
if(flag) printf("Yes\n");
else printf("No\n");
memset(s, 0, sizeof(s));
memset(t, 0, sizeof(t));
}
return 0;
}
不忘初心方得始终