Skip to content

判断两个字符串是否是乱序字符串(同字母异序词)

js
// 乱序字符串

function isAnagram1(str1, str2) {
    if (str1.length !== str2.length) return false;
    for (let l of str1) {
        if (!str2.includes(l)) {
            return false
        }
    }
    return true
}

// 排序 O(n log n)
function isAnagram2(str1, str2) {
    if (str1.length !== str2.length) return false;
    return str1.split('').sort().join('') === str2.split('').sort().join('')
}

// 字母频次
function isAnagram(str1, str2) {
    if (str1.length !== str2.length) return false;
    let dict1 = new Map(), dict2 = new Map()
    for (let l of str1) {
        dict1.set(l, (dict1.get(l) || 0) + 1)
    }
    for (let l of str2) {
        dict2.set(l, (dict2.get(l) || 0) + 1)
    }

    // 最多 26 个,不会跟随输入数据增长
    for (const key of dict1.keys()) {
        if (dict1.get(key) !== dict2.get(key)) {
          return false
        }
      }
    return true
    // console.log(dict1, dict2)
}

console.log(isAnagram('listen', 'silent')); // true
console.log(isAnagram('hello', 'world')); // false