1790. 仅执行一次字符串交换能否使两个字符串相等
1790. 仅执行一次字符串交换能否使两个字符串相等
给你长度相等的两个字符串 s1
和 s2
。一次 字符串交换 操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。
如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回 true
;否则,返回 false
。
示例 1:
输入:s1 = "bank", s2 = "kanb"
输出:true
解释:例如,交换 s2 中的第一个和最后一个字符可以得到 "bank"
示例 2:
输入:s1 = "attack", s2 = "defend"
输出:false
解释:一次字符串交换无法使两个字符串相等
示例 3:
输入:s1 = "kelb", s2 = "kelb"
输出:true
解释:两个字符串已经相等,所以不需要进行字符串交换
示例 4:
输入:s1 = "abcd", s2 = "dcba"
输出:false
提示:
1 <= s1.length, s2.length <= 100
s1.length == s2.length
s1
和s2
仅由小写英文字母组成
解答
class Solution {
public boolean areAlmostEqual(String s1, String s2) {
int len = s1.length();
int count = 0;
char c1 = 'A';
char c2 = 'A';
for(int i = 0;i < len;i++){
char temp1 = s1.charAt(i);
char temp2 = s2.charAt(i);
if(temp1 != temp2){
if(count == 0){//第一次只记录
c1 = temp1;
c2 = temp2;
}else if(c1 != temp2 || c2 != temp1){//交换后不同则不能
return false;
}
count++;
//同一位置不同小写字母数量超过2次则不能
if(count > 2){
return false;
}
}
}
//单独一个字母不同则不能
return count != 1;
}
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 孤寂灬无痕
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果