这是一道简单的字符串题目
我们用一个二维数组来记录字符每个位置 并用来比较
#include <bits/stdc++.h> #define ll long long using namespace std; const int maxn = 1e6 + 7; char s[maxn]; int pos[maxn][30]; ///pos[i][j] 表示i位置后j字符首次出现的位置 int main(void){ scanf("%s", s+1); int len1=strlen(s+1); for (int i=len1-1;i>=0;--i) { for (int j = 0; j < 26; ++j) pos[i][j] = pos[i+1][j]; pos[i][s[i+1]-'a'] = i+1; } int t;scanf("%d",&t); while (t--) { scanf("%s", s+1); int len2=strlen(s+1); int p=0,flag=1; for (int i=1;i<=len2;++i) { if (pos[p][s[i]-'a'])p=pos[p][s[i]-'a']; else{flag = 0; break;} } if (flag) printf("Yes\n"); else printf("No\n"); } return 0; }