暴力做出来了六个点,但是题目没给测试点,能不能帮忙优化一下谢谢啦
#include<bits/stdc++.h>
#include<string>
using namespace std;
//#define delete Im_Your_Dad_Bro
string a[10001];
string b[10001];
int N,M;
int tab,score;
int note;
void Change(int where,int situation,char word){
b[where][situation]=word;
return ;
}
void Delete(int where,int situation){
string u="";
for(int i=0;i<situation;i++){
u=u+b[where][i];
}
for(int i=situation+1;i<b[where].length();i++){
u=u+b[where][i];
}
b[where]=u;
return ;
}
void Add(int where,int situation,char word){
string u="";
for(int i=0;i<situation;i++){
u=u+b[where][i];
}
u=u+word;
for(int i=situation;i<b[where].length();i++){
u=u+b[where][i];
}
b[where]=u;
return ;
}
bool Isword(int where,int situation){
if(b[where]==a[situation]){
return true;
}
else{
return false;
}
}
int main(){
cin>>N>>M;
for(int i=0;i<N;i++){
cin>>a[i];
}
for(int i=0;i<M;i++){
cin>>b[i];
}
for(int i=0;i<M;i++){
score=0;
for(int j=0;j<N;j++){
note=0;
if(Isword(i,j)){
score=-1;
break;
}
if(a[j].length()==b[i].length()+1){
//cout<<"A ";
tab=0;
for(int k=0;k<a[j].length();k++){
if(a[j][k]!=b[i][k]){
note=k;
Add(i,k,a[j][k]);
break;
}
}
for(int k=note;k<a[j].length();k++){
if(a[j][k]!=b[i][k]){
tab++;
break;
}
}
if(tab==0){
score++;
}
Delete(i,note);
}
else if(a[j].length()==b[i].length()){
//cout<<"C ";
char ty=' ';
tab=0;
for(int k=0;k<b[i].length();k++){
if(a[j][k]!=b[i][k]){
note=k;
ty=b[i][k];
Change(i,k,a[j][k]);
break;
}
}
for(int k=note;k<b[i].length();k++){
if(a[j][k]!=b[i][k]){
tab++;
break;
}
}
if(tab==0){
score++;
}
Change(i,note,ty);
}
else if(a[j].length()==b[i].length()-1){
//cout<<"D ";
char ty=' ';
tab=0;
for(int k=0;k<b[i].length();k++){
if(a[j][k]!=b[i][k]){
note=k;
ty=b[i][k];
Delete(i,k);
break;
}
}
for(int k=note;k<b[i].length();k++){
if(a[j][k]!=b[i][k]){
tab++;
break;
}
}
if(tab==0){
score++;
}
Add(i,note,ty);
}
}
cout<<score<<endl;
}
}