LeetCode每日一题- day17
新手入坑LeetCode,每天打卡一道题
算法不一定很好,只是我自己的一个水平体现,做个自己刷题的记录,欢迎交流学习
(尽量AC LeetCode官方的每日一题)
欢迎交流学习!
题目:1790. 仅执行一次字符串交换能否使两个字符串相等
给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换 操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。
如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回 true ;否则,返回 false 。
思路:
- 记录两个字符串中不同字符的数量(
0
或2
才是答案) - 记录两个不同字符的位置,判断是否该位置互相对应的元素是否相同
代码:
class Solution {
public:
bool areAlmostEqual(string s1, string s2) {
int n = s1.size();
int count = 0;//记录s1和s2不同字符的数量
vector<int> ans;//记录不同的字符的位置(后面需要确认是否相同)
for(int i = 0; i < n; i ++){
if(s1[i] != s2[i]) ans.push_back(i),count ++;
}
if(count == 0 ){ //完全一致
return true;
}else if(count == 2){
//有两个字符不同
//第一次没太注意,写的有bug 喜提一发WA:"caa" "aaz"
if(s1[ans[0]] == s2[ans[1]] && s1[ans[1]] == s2[ans[0]]){
return true;
}
}
return false;
}
};