1. 程式人生 > >網易校招——藏寶圖

網易校招——藏寶圖

題目描述

牛牛拿到了一個藏寶圖,順著藏寶圖的指示,牛牛發現了一個藏寶盒,藏寶盒上有一個機關,機關每次會顯示兩個字串 s 和 t,根據古老的傳說,牛牛需要每次都回答 t 是否是 s 的子序列。注意,子序列不要求在原字串中是連續的,例如串 abc,它的子序列就有{空串, a, b, c, ab, ac, bc, abc} 8 種。

輸入描述:

每個輸入包含一個測試用例。每個測試用例包含兩行長度不超過 10 的不包含空格的可見 ASCII 字串。

輸出描述:

輸出一行 “Yes” 或者 “No” 表示結果。

示例1

輸入

x.nowcoder.com
ooo

輸出

Yes

這題的思路,判斷字串t是否是s的子串,依次判斷字串t中每個字元在s中的位置,如果位置下標依次增大則為子串。這裡需要考慮重複字元的位置衝突,所以使用find函式時,需要從上一個字元的位置開始搜,這樣就不會find到字元第一次出現的位置(但也不一定最後一次出現的位置是正確的,所以需要從上一個字元的位置開始搜尋,第一次出現的位置即可)。

#include<iostream>
#include<cstring>

using namespace std;

int main(){
    string s,
t; cin>>s>>t; int lens=t.length(); int pre=-1; int loc=0; for(int i=0;i<lens;i++){ if(s.find(t[i])!=string::npos){ int loc=s.find(t[i],pre+1); if(loc>pre) pre=loc; else{ cout<<"No"<<
endl; return 0; } } else{ cout<<"No"<<endl; return 0; } } cout<<"Yes"<<endl; return 0; }