解题思路
本题可以使用模拟算法,核心是统计 s1 和 s2 中字符不同的位置。
设不同的位置个数为 cnt:
- 如果 cnt=0,说明两个字符串已经相等,直接输出 true。
- 如果 cnt=2,设两个不同位置为 i 和 j,只要满足:
P4900.仅执行一次字符串交换能否使两个字符串相等
题目描述
给定两个长度相等的字符串 s1 和 s2。
一次字符串交换操作定义为:选择某一个字符串中的两个下标(可以相同),并交换这两个下标对应的字符。
请判断是否可以对其中一个字符串执行最多一次字符串交换,使得 s1 和 s2 相等。
如果可以,输出 true;否则,输出 false。
输入描述
输入共两行。
第一行输入一个字符串 s1。
第二行输入一个字符串 s2。
输出描述
输出一个布尔值。
如果可以对其中一个字符串执行最多一次字符串交换,使得 s1 和 s2 相等,输出 true;否则,输出 false。
样例 1
输入
bank
kanb
输出
true
解释
交换 s2 中的第一个和最后一个字符,可以得到 "bank"。
样例 2
输入
attack
defend
输出
false
解释
一次字符串交换无法使两个字符串相等。
样例 3
输入
kelb
kelb
输出
true
解释
两个字符串已经相等,所以不需要进行字符串交换。
样例 4
输入
abcd
dcba
输出
false
数据范围
- 1≤s1.length,s2.length≤100
- s1.length==s2.length
- s1 和 s2 仅由小写英文字母组成