判断两个字符串是否互为变形词

题目

给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样且每种字符出现的次数也一样,那么str1和str2互为变形词。

举例

str1="123",str2="231",返回true。

str1="123",str2="2331",返回false。

实现方法

此题的两个字符串种类和次数都一样,只有顺序不一样,那么可以使用一个数组记录第一个字符串每个字母的出现频率次数,这样在第二个字符串中遍历每个字符,从数组中挨个减去,如果数组最后为空了,说明两个字符互为变形词。

对于数组的选择,可以利用字符的ASCII码值。

工具方法

1 Array.prototype.fill()
2 String.prototype.charCodeAt(0)

代码实现

  const isDeformation = (str1, str2) => {
    const len1 = str1.length, len2 = str2.length
     
    if (typeof str1 !== 'string' || typeof str1 !== 'string') {
       return false
    }

    if (len1 !== len2) {
       return false
    }

    const arr = new Array(256)
    arr.fill(0)
    const str1ToCharArray = str1.split('')
    const str2ToCharArray = str2.split('')

    for (let i = 0; i < len1; i++) {
      const curCharCodeAt = str1ToCharArray[i].charCodeAt(0)
      arr[curCharCodeAt]++
    }

    for (let i = 0; i< len2; i++) {
      const curCharCodeAt = str2ToCharArray[i].charCodeAt(0)
      arr[curCharCodeAt]--

      if (arr[curCharCodeAt] < 0) {
        return false
      }
    }

    return true
  }