题目大意:给两个长度相等的字符串,统计不同字符位置的个数,同时允许交换一组字符位置,使字符串相似度最高,要求输出交换后的距离(不同个数),以及交换的位置,如果没有交换的必要则输出-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;
}