给定一个字符串 $S$,有 $q$ 组询问,每次给定一个字符串 $T$,求字符串 $T$ 是否是 $S$ 中的一个子序列。
数据保证 $1 \leq |S| \leq 10^5, 1 \leq \sum{|T|} \leq 10^6$ ,所有字符串仅包含小写字母。
#include <iostream> using namespace std; const int BASE = 26; string S, T; int q, Pos[100005][BASE]; int main(){ cin >> S; int n = S.size(); for (int i = 0; i < BASE; i++) ___(1)___ = -1; for (int i = n - 1; i >= 0; i--){ for (int j = 0; j < BASE; j++) ___(2)___; ___(3)___; } cin >> q; while (q--){ cin >> T; int len = T.size(), now = 0; for (int i = 0; ___(4)___; i++) now = ___(5)___; if (now != -1) cout << "YES\n"; else cout << "NO\n"; } return 0; }
1. (1) 处应填()
2. (2) 处应填()
3. (3) 处应填()
4. (4) 处应填()
5. (5) 处应填()
陈伦制作 版权所无 粤ICP备16127491号-1