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

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

  • 相关阅读:
    洛谷P2640 神秘磁石(欧拉筛法)
    并查集
    高精度算法
    手写堆
    对拍的使用
    unity4.6学习Ugui中文文档-------参考-UGUI Rect Transform
    使用c#访问脚本里变量的方法
    Unity3d 脚本相互调用
    set_union的几个例子[转]
    C++ 关键字——friend
  • 原文地址:https://www.cnblogs.com/cducz/p/11830735.html
Copyright © 2011-2022 走看看