预处理:建立数组判断两个字母的组合的相对位置是否冲突 但不知道为什么最后一个点不过,“jo”这个组合不知道为什么标记成了冲突。。。
#include <bits/stdc++.h>
using namespace std;
string s, t;
int Q, vis[26], f[1000];
int main(){
#ifndef ONLINE_JUDGE
freopen("123.in","r",stdin);
freopen("123.out","w",stdout);
#endif
cin >> s >> t;
int a = s.length(), b = t.length();
for(int i = 0; i < 18; i++){
for(int j = i; j < 18; j++){
int scnt = 0, tcnt = 0, sflag = 1, tflag = 1;
while(true){
while((s[scnt] - 'a') != i && (s[scnt] - 'a') != j && sflag) {
scnt ++;
if(scnt >= a){
sflag = 0;
break;
}
}
while((t[tcnt] - 'a') != i && (t[tcnt] - 'a') != j && tflag) {
tcnt ++;
if(tcnt >= a){
tflag = 0;
break;
}
}
if(tflag + sflag == 2){
if(s[scnt] == t[tcnt]) {
scnt ++;
tcnt ++;
continue;
}
else {
f[i * 26 + j] = 1;
break;
}
}
else{
if(tflag + sflag == 0) break;
else {
f[i * 26 + j] = 1;
break;
}
}
}
}
}
cin >> Q;
string p;
while(Q--){
cin >> p;
int flag = 0;
for(int i = 0; i < p.length(); i++){
for(int j = i; j < p.length(); j++){
if(f[(p[i] - 'a')*26 + (p[j] - 'a')]) flag = 1;
}
}
if(flag) cout << 'N';
else cout << 'Y';
}
}```