UVa10340 - All in All 题解

题目

题目链接

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;
}
posted @ 2020-11-08 23:27  1v7w  阅读(43)  评论(0编辑  收藏  举报