题目描述
小明在在报纸上看到了两个字符串,S1 ,S2。
小明想知道能否使用恰好一次交换,交换 S1中的两个位置 (i,j),1≤i<j≤n(i,j) 。
问能否使得 S1=S2 。(注意:当字符串相同的时候 有相同字母也算交换成功)
输入描述:
输入共 333 行。
第一行表示 n (2≤n≤105),表示字符串长度。
第二行一个小写字母字符串 S1,|S1∣=n。
第三行一个小写字母字符串 S2,∣S2∣=n。
输出描述:
输出共 111 行,“YES"或“NO”(不包括双引号),表示能否使 S1=S2 。
输入
5 abcda bacda
输出
YES
#include "bits/stdc++.h"
using namespace std;
const int N = 100010;
int w[N], c[30];
int main()
{
int n;
cin>>n;
string s1, s2;
cin>>s1>>s2;
int tot = 0;
for(int i=0;i<n;i++){
if(s1[i]!=s2[i]) w[tot++] = i;
}
if(tot == 2){
int m = w[0], n = w[1];
swap(s1[m], s1[n]);
if(s1==s2) cout<<"YES";
else cout<<"NO";
}
else{
if(tot == 0){
for(int i=0;i<n;i++) c[s1[i]-'a']++;
for(int i=0;i<26;i++) {
if(c[i]>1){
cout<<"YES";
return 0;
}
}
cout<<"NO";
}
else cout<<"NO";
}
return 0;
}