親密字串

qfstudy發表於2018-07-14

在leetCode上看到親密字串,接下來對這個詞進一步的瞭解,從而寫下了這篇筆記。

親密字串

給定兩個由小寫字母構成的字串 AB ,只要我們可以通過交換 A 中的兩個字母得到與 B 相等的結果,就返回 true ;否則返回 false

提示:

  • A和B僅由小寫字母構成
  • 只交換兩個字母
  • A和B的長度相等

實現思路

親密字串幾乎是匹配的,這兩個字串只有兩個索引的值不一樣(兩個字串不是完全相等的情況下)

一共有兩種情況

  • 一是兩個字串完全相等。 在這種情況下,我們需要在一個字串中尋找兩個相同的字母的索引,交換這兩個字母的位置,這兩個字串還是相等的。

  • 二是這兩個字串不相等的情況。 首先,比較這兩個字串,找出這兩個字串不相等的字母的位置。然後統計字母不一樣的數量是否為2(只需要交換兩個字母的位置),如果大於2則不是親密字串。找到不一樣的字母以後,在字串A中交換這兩個字母的位置,然後比較是否相等,相等則是親密字串

var A='abfdbc'
var B='abcdbf'
function buddyStrings(A, B) {
    if (A.length != B.length) {
        return false;
    }
    if (A === B) {
        for (let i = 0; i < A.length; i++) {
            for (let j = i + 1; j < A.length; j++) {
                if (A[i] === A[j]) {
                    var charA = A[i]
                    return A[i]
                }
            }
        }
    } else {
        var count = 0
        var aString = []
        var bString = []
        for (let i = 0; i < A.length; i++) {
            if (A.charAt(i) !== B.charAt(i)) {
                aString[count] = A.charAt(i)
                bString[count] = B.charAt(i)
                count += 1
                if (count > 2) {
                    return false
                }
            }
        }
        if (aString[1] === bString[0] && aString[0] === bString[1] && count < 3) {
            return aString
        }
        else {
            return false
        }
    }
}
var a = buddyStrings(A, B)
console.log(a)
複製程式碼

相關文章