思路:这个题wa到自闭,不过还好最后做出来了,就暴力枚举一下字典中的每一个单词,注意一下,置换这个操作就行,举个例子 thu 和 tuh是置换 thu 和tug不是置换
code;
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=110;
string s[N];
int main()
{
int d,n;
cin>>d;
for(int i=0;i<d;i++){
cin>>s[i];
}
string str;
cin>>n;
while(n--){
cin>>str;
bool flag1=0,flag2=0;
for(int i=0;i<d;i++){
if(str==s[i]){
cout<<str<<endl;
cout<<"CORRECT"<<endl;
puts("");
flag1=1;
break;
}
}
if(flag1) continue;
// cout<<"***"<<endl;
cout<<str<<endl;
for(int i=0;i<d;i++){
int cnt=0;
int a[20];
int num=0;
if(s[i].size()==(str.size()+1)){
for(int j=0,k=0;j<s[i].size()&&k<str.size();){
if(s[i][j]==str[k]) j++,k++;
else{
j++;
num++;
}
}
if(num<=1){
flag2=1;
cout<<"ONE LETTER OMITTED FROM "<<s[i]<<endl;
}
}
else if((s[i].size()+1)==str.size()){
for(int j=0,k=0;j<s[i].size()&&k<str.size();){
if(s[i][j]==str[k]) j++,k++;
else{
k++;
num++;
}
}
if(num<=1){
cout<<"ONE LETTER ADDED TO "<<s[i]<<endl;
flag2=1;
}
}
else if(s[i].size()==str.size()){
for(int j=0;j<s[i].size();j++){
if(s[i][j]!=str[j]) {
num++;
a[cnt++]=j;
}
}
if(num==1){
cout<<"ONE LETTER DIFFERENT FROM "<<s[i]<<endl;
flag2=1;
}
else if(num==2&&a[1]-a[0]==1&&s[i][a[0]]==str[a[1]]&&s[i][a[1]]==str[a[0]]){//注意置换的条件
cout<< "TWO LETTERS TRANSPOSED IN "<<s[i]<<endl;
flag2=1;
}
}
}
if(flag2) cout<<endl;
if(!flag1&&!flag2){
cout<<"UNKNOWN"<<endl;
cout<<endl;
}
}
return 0;
}