網易校招——藏寶圖
阿新 • • 發佈:2018-11-11
題目描述
牛牛拿到了一個藏寶圖,順著藏寶圖的指示,牛牛發現了一個藏寶盒,藏寶盒上有一個機關,機關每次會顯示兩個字串 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;
}