题意:给你一个文本字符串P,n个字符串si,然后判断字符串si是不是文本串P的子序列
枚举给个字符最早出现的位置就可以了 #include <bits/stdc++.h> using namespace std; const int maxn = 1e6 + 5; char s[maxn]; int pos[maxn][30]; int dis[maxn]; int main() { scanf("%s", s + 1); int n = strlen(s + 1); for(int i = n; i >= 1; i--) { for(int j = 0; j <= 26; j++) { pos[i][j] = pos[i + 1][j]; } pos[i][s[i] - 'a'] = i; dis[s[i] - 'a'] = i; } scanf("%d", &n); for(int i = 1; i <= n; i++) { scanf("%s", s + 1); int m = strlen(s + 1); int start = dis[s[1] - 'a']; if(start == 0) { printf("NO\n"); continue; } int flag = 1; for(int j = 2; j <= m; j++) { if(pos[start + 1][s[j] - 'a'] == 0) { flag = 0; break; } start = pos[start + 1][s[j] - 'a']; } if(flag) { printf("YES\n"); } else { printf("NO\n"); } } return 0; }