zoukankan      html  css  js  c++  java
  • 亲密字符串之Javascript解法

    本题为leetcode第859题,原题链接在此:https://leetcode-cn.com/problems/buddy-strings/submissions/

    给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true ;否则返回 false 。

    示例 1:

    输入: A = "ab", B = "ba"
    输出: true
    示例 2:

    输入: A = "ab", B = "ab"
    输出: false
    示例 3:

    输入: A = "aa", B = "aa"
    输出: true
    示例 4:

    输入: A = "aaaaaaabc", B = "aaaaaaacb"
    输出: true
    示例 5:

    输入: A = "", B = "aa"
    输出: false

    官方题解我直接搬过来了:

    方法:情况列举
    思路

    如果 A[i] == B[i],我们就说 i 是匹配的,否则称 i 是不匹配的。亲密字符串几乎是完全匹配的,因为一次交换只会影响到两个索引。

    如果交换 A[i] 和 A[j] 可以证明 A 和 B 是亲密字符串,那么就有 A[i] == B[j] 以及 A[j] == B[i]。 这意味着在 A[i], A[j], B[i], B[j] 这四个自由变量中,只存在两种情况:A[i] == A[j] 或 A[i] != A[j]

    算法

    让我们来看看这些情况。

    在 A[i] == A[j] == B[i] == B[j] 的情况下,字符串 A 与 B 相等。因此,如果 A == B,我们应当检查每个索引 i 以寻找具有相同值的两个匹配。

    在 A[i] == B[j], A[j] == B[i], (A[i] != A[j]) 的情况下,其余索引是相匹配的。所以如果 A 和 B 只有两个不匹配的索引(记作 i 和 j),我们应该检查并确保等式 A[i] == B[j] 和 A[j] == B[i] 成立。

    我自己写的解法:

    /**
     * @param {string} A
     * @param {string} B
     * @return {boolean}
     */
    var buddyStrings = function(A, B) {
        //A,B长度不相等且长度小于2的 或 A,B至少有一个是空串,两种情况直接false
        if(A.length !== B.length || A.length < 2){
            return false
        }
            
        //定义count变量,用于记录相对位置字符不同的数量
        let count = 0
        let arr1 = new Array()
        let arr2 = new Array()
        //循环字符串,对A,B 相对应的索引 的元素进行比较
        for(let i=0;i<A.length;i++){
            if(A[i] !== B[i])
                count++
            if(count === 1)
                arr1.push(i)
            if(count === 2)
                arr2.push(i)
        }
        
        //count === 0代表AB两个字符串完全相同,但是必须有重复字符串才可以进行交换
        if(count === 0)
            return new Set(A).size < A.length
        if(count === 1 || count > 2){
            return false
        }else{
                return A[arr1[0]]===B[arr2[0]] && B[arr1[0]]===A[arr2[0]]
        }    
    };
    

      这道题的我声明了两个数组用来保存第一次元素不同的索引值,和第二次元素不同时的索引值,比较费空间,而且代码质量也不高,但是比较容易看懂。

  • 相关阅读:
    【郑轻邀请赛 G】密室逃脱
    【郑轻邀请赛 C】DOBRI
    【郑轻邀请赛 F】 Tmk吃汤饭
    【郑轻邀请赛 I】这里是天堂!
    【郑轻邀请赛 B】base64解密
    【郑轻邀请赛 A】tmk射气球
    【郑轻邀请赛 H】 维克兹的进制转换
    解决adb command not found以及sdk环境配置
    adb shell 命令详解,android, adb logcat
    Unexpected exception 'Cannot run program ... error=2, No such file or directory' ... adb'
  • 原文地址:https://www.cnblogs.com/cducz/p/11830735.html
Copyright © 2011-2022 走看看