首页 > 解决方案 > JavaScript 递归计算重复字母

问题描述

我在编码时遇到问题。我想计算一个单词中有多少个字母递归重复。我的代码如下所示:

var check = words[0]

  if(!words){
     return 0
  } else {
     for(var i = 0; i < words.length; i++){
        if(words[i] == check){
           return 1 //+ countDuplicate (words.slice(1))
        }
     }
     return countDuplicate (words.slice(1))
  }

测试用例示例:

countDuplicate ('greatestme') // 2, ==> which are 'e' 3 times and 't' 2 times

标签: javascriptrecursioncountletter

解决方案


const freqDist = ([first, ...rest], counts = {}) => (result => (
  rest.length ? freqDist(rest, result) : result
))({ ...counts, [first]: ((counts[first] || 0) + 1) })

/* More readable alternative with mutable `counts` */
// const freqDist = ([first, ...rest], counts = {}) => {
//   counts[first] = (counts[first] || 0) + 1
//   return (rest.length > 0) ? freqDist(rest, counts) : counts
// }

const stripSingles = obj => Object.keys(obj).reduce((acc, curr) => (
  (obj[curr] > 1) ? { ...acc, [curr]: obj[curr] } : acc
), {})

console.log(stripSingles(freqDist('greatestme')))


推荐阅读