1. 程式人生 > >Bailian2976 Bailian1936 All in All【字串匹配】

Bailian2976 Bailian1936 All in All【字串匹配】

2976:All in All
描述
給定兩個字串s和t,請判斷s是否是t的子序列。即從t中刪除一些字元,將剩餘的字元連線起來,即可獲得s。
輸入
包括若干個測試資料。每個測試資料由兩個ASCII碼的數字和字母串s和t組成,s和t的長度不超過100000。
輸出
對每個測試資料,如果s是t的子序列則輸出“Yes”,否則輸出“No”。
樣例輸入
sequence subsequence
person compression
VERDI vivaVittorioEmanueleReDiItalia
caseDoesMatter CaseDoesMatter
樣例輸出
Yes
No
Yes
No
來源
Ulm Local 2002, POJ 1936, 程式設計實習2007

問題連結Bailian2976 Bailian1936 All in All
問題描述:(略)
問題分析
    這兩個問題與參考連結是同一題。輸入2個字串,s和t,看s是否是t的子串。t中的字元可以任意刪除。只需要順序匹配字串即可。解體程式碼是直接CV來的。
程式說明:(略)
參考連結UVA10340 POJ1936 ZOJ1970 All in All【字串匹配】
題記:(略)

AC的C語言程式如下:

/* UVA10340 POJ1936 ZOJ1970 All in All */  
  
#include <stdio.h>  
#include <string.h>  
  
#define MAXN 110000  
  
char s[MAXN], t[MAXN];  
  
int delstrcmp(char *s, char *t)  
{  
    int i, j, slen, tlen;  
  
    slen = strlen(s);  
    tlen = strlen(t);  
  
    for(i=0, j=0; i<slen && j<tlen;) {  
        if(s[i] == t[j]) {  
            i++;  
            j++;  
        } else  
            j++;  
    }  
  
    return i == slen;  
}  
  
int main(void)  
{  
    while(scanf("%s%s", s, t) != EOF)  
        printf("%s\n", delstrcmp(s, t) ? "Yes" : "No");  
  
    return 0;  
}