检查两个字符串是否是彼此的字谜

时间:2020-07-02 22:34:57

标签: javascript

isAnagram(firstString, secondString)

参数

firstString - any JavaScript String
secondString - any JavaScript String
Return Value

一个布尔值,指示secondString是否为firstString的字谜。

示例

isAnagram('restful', 'fluster')             // -> true
isAnagram('dormitory', 'dirty room')        // -> true
isAnagram('roses', 'horse')                 // -> false
isAnagram('debit card', 'bad credit')       // -> true
isAnagram('nearby there', 'nearly three')   // -> false
isAnagram('school master', 'the classroom') // -> true
isAnagram('ludicrous', 'ridiculous')        // -> false
isAnagram('anagram', 'nag a ram')           // -> true

到目前为止我有

function isAnagram(firstString, secondString) {
  return firstString.replace(' ','').split('').sort().join('') === secondString.replace(' ','').split('').sort().join('')
}

但是我收到一个错误AssertionError:预期false等于true

最后一个“ na公羊”

1 个答案:

答案 0 :(得分:1)

如果将两个字符串作为彼此的字谜的条件与两个字符串的每个字母字符的数量完全相同,则不区分大小写,您可以这样做:

const testCases = [['restful', 'fluster', true],['dormitory', 'dirty room', true],['roses', 'horse', false],['debit card', 'bad credit', true],['nearby there', 'nearly three', false],['school master', 'the classroom', true],['ludicrous', 'ridiculous', false],['anagram', 'nag a ram', true]],

      isAnagram = (s1,s2) => {
        const countLetters = s =>
              [...s].reduce((r,c) => {
                const key = c.toLowerCase()
                if(/[a-z]/i.test(c)) 
                  r[key] = (r[key]||0)+1
                return r
              },{}),
              countS1 = countLetters(s1),
              countS2 = countLetters(s2)
        return  Object.keys(countS1).length == Object.keys(countS2).length &&
                Object
                  .keys(countS1)
                  .every(c => countS2[c] == countS1[c])
      }
      
console.log(testCases.every(([s1,s2,res]) => isAnagram(s1,s2) == res))