NC251441. 一次交换
描述
小明在在报纸上看到了两个字符串, ,。
小明想知道能否使用恰好一次交换,交换 中的两个位置 。
问能否使得 。
输入描述
输入共 行。
第一行表示 ,表示字符串长度。
第二行一个小写字母字符串 。
第三行一个小写字母字符串 。
输出描述
输出共 行,“YES"或“NO”(不包括双引号),表示能否使 。
示例1
输入:
5 abcda bacda
输出:
YES
示例2
输入:
3 abc abc
输出:
NO
Python3 解法, 执行用时: 57ms, 内存消耗: 7416K, 提交时间: 2023-05-06 09:59:30
n,a,b=int(input()),input(),input() if a==b: for x in 'qazwsxedcrfvtgbyhnujmikolp': if a.count(x)>1: print('YES') break else: print("NO") else: ans=[i for i in range(n) if a[i]!=b[i]] if len(ans)==2 and a[ans[0]]==b[ans[1]] and a[ans[1]]==b[ans[0]]: print("YES") else: print("NO")
C++(clang++ 11.0.1) 解法, 执行用时: 7ms, 内存消耗: 988K, 提交时间: 2023-05-08 23:15:50
#include<bits/stdc++.h> using namespace std; int n, a[1<<20], cnt, mx, f[26]; string s1, s2; int main() { cin >> n >> s1 >> s2; for(int i = 0; s1[i]; i++) { if(s1[i] - s2[i]) a[cnt++] = i; mx = max(mx, ++f[s1[i]-'a']); } if(cnt > 1) swap(s1[a[0]], s1[a[1]]); cout << ((cnt > 1|| mx > 1) && s1 == s2 ? "YES" : "NO"); }
pypy3 解法, 执行用时: 192ms, 内存消耗: 31964K, 提交时间: 2023-05-07 10:50:16
from collections import Counter n = int(input()) a = input() b = input() if sorted(a) != sorted(b): print('NO') exit(0) s = 0 for i in range(n): s += a[i] != b[i] if s > 2: print('NO') elif s == 2: print('YES') elif len(Counter(a).items()) == n: print('NO') else: print('YES')