LeetCode每日一题- day17

LeetCode每日一题- day17

新手入坑LeetCode,每天打卡一道题
算法不一定很好,只是我自己的一个水平体现,做个自己刷题的记录,欢迎交流学习
(尽量AC LeetCode官方的每日一题)
欢迎交流学习!

题目:1790. 仅执行一次字符串交换能否使两个字符串相等

给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换 操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。
如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回 true ;否则,返回 false 。

思路:

  • 记录两个字符串中不同字符的数量(02 才是答案)
  • 记录两个不同字符的位置,判断是否该位置互相对应的元素是否相同

代码:

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;
    }
};

猜你喜欢

转载自blog.csdn.net/Nmj_World/article/details/127272243