题目大意:给两个长度相等的字符串,统计不同字符位置的个数,同时允许交换一组字符位置,使字符串相似度最高,要求输出交换后的距离(不同个数),以及交换的位置,如果没有交换的必要则输出-1 -1。
#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
#define Max 200005
int Map[26][26];
int p1=-1,p2=-1;
int main()
{
string a,b;
int n,count=0;
cin>>n;
cin>>a>>b;
memset(Map,-1,sizeof(Map));
for(int j=0;j<n;j++)
{
if(a[j]!=b[j])
{
Map[a[j]-‘a‘][b[j]-‘a‘]=j;
count=count+1;
}
}
for(int i=0;i<26;i++)
{
for(int j=0;j<26;j++)
{
if(Map[i][j]!=-1&&Map[j][i]!=-1)
{
p1=Map[i][j]+1;
p2=Map[j][i]+1;
count=count-2;
printf("%d\n",count);
printf("%d %d\n",p1,p2);
return 0;
}
}
}
for(int i=0;i<26;i++)
{
for(int j=0;j<26;j++)
{
for(int k=0;k<26;k++)
{
if(Map[i][j]!=-1&&Map[j][k]!=-1)
{
p1=Map[i][j]+1;
p2=Map[j][k]+1;
count=count-1;
printf("%d\n",count);
printf("%d %d\n",p1,p2);
return 0;
}
}
}
}
printf("%d\n",count);
printf("%d %d\n",p1,p2);
return 0;
}