题目
给定两个字符串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
}