題目
給定兩個字符串str1和str2,如果str1和str2中出現(xiàn)的字符種類一樣且每種字符出現(xiàn)的次數(shù)也一樣,那么str1和str2互為變形詞。
舉例
str1="123",str2="231",返回true。
str1="123",str2="2331",返回false。
實(shí)現(xiàn)方法
此題的兩個字符串種類和次數(shù)都一樣,只有順序不一樣,那么可以使用一個數(shù)組記錄第一個字符串每個字母的出現(xiàn)頻率次數(shù),這樣在第二個字符串中遍歷每個字符,從數(shù)組中挨個減去,如果數(shù)組最后為空了,說明兩個字符互為變形詞。
對于數(shù)組的選擇,可以利用字符的ASCII碼值。
工具方法
1 Array.prototype.fill()
2 String.prototype.charCodeAt(0)
代碼實(shí)現(xiàn)
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
}