函数获取指定字符串中每个字母的出现次数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数获取指定字符串中每个字母的出现次数相关的知识,希望对你有一定的参考价值。

下面的函数获取指定字符串中每个字母的出现次数。我理解在第二个for循环之前发生了什么。为什么他加入"var j = i + 1;"?而不是从"var j=0"开始?

function okkur(txt) {
  var str = txt.toLowerCase().replace(/\s+/g, "").split("");
  var okk = "";
  var count = 0
    for (var i = 0; i < str.length; i++) {
      count = 1;
      for (var j = i + 1; j <= str.length; j++) {
        if (str[i] === str[j]) {
        count++;
        str.splice(j, 1);
        }
      }
      okk = okk.concat(str[i] + " occurs " + count + " times. \n");
    }
return okk;
}

或者是否有更简单的方法可以实现此功能?

答案

您可以使用哈希表来计算每个字母的数量。

此方法使用单个循环访问所有字母,使用另一个循环生成结果。

function okkur(txt) {
    var hash = Object.create(null);

    txt .toLowerCase()
        .replace(/\s+/g, "")
        .split("")
        .forEach(function (c) {
            hash[c] = (hash[c] || 0) + 1;
        });

    return Object
        .keys(hash)
        .map(function (k) {
            return k + " occurs " + hash[k] + " times.";
        })
        .join('\n');
}

console.log(okkur('stackoverflow'));
.as-console-wrapper { max-height: 100% !important; top: 0; }
另一答案

通过在j = i + 1而不是j = 0处开始第二个循环,该函数检查索引i之后的所有字母。

另一答案

我会用这样的东西,所以你在一个对象中有一个很好的结构。

const charFreq = text => text.split('').reduce((oFrequency, sChar) => {
    oFrequency[sChar] ? oFrequency[sChar]++ : oFrequency[sChar] = 1;
    return oFrequency
}, {})

从这个结构中,您可以显示您想要的输出,在您的情况下:

Object.keys(charFreq).map(word => `${word} occurs ${charFreq[word]} times`).join('/n')

所以你的最终功能应该是这样的:

function okkur (text) {
   const charFreq = text.split('').reduce((oFrequency, sChar) => {
     oFrequency[sChar] ? oFrequency[sChar]++ : oFrequency[sChar] = 1
     return oFrequency
   }, {})
   return Object.keys(charFreq).map(word => `${word} occurs ${charFreq[word]} times`).join('\n') 
}
    
console.log(okkur('stackoverflow'))
另一答案

我决定改进之前给出的答案。它基本上是相同的,除了有另一个函数迭代你要检查的每个数字/字母/符号。它还会检查您正在检查的字符串中出现零次的每个数字/字母/符号。

请记住,我们正在使用正则表达式提供countTheseCharacters()函数。因此,如果有特殊字符,您将不得不逃避它们(如点和单词中断)。

这可能不是最高效的解决方案。但我认为这是你可以遵循的东西:)。您还可以通过任何方式替换正则表达式,并检查具有相同功能的字符串中存在多少次单词(如披萨)。

function countLetters(string, match){
  let regExp = new RegExp(match,"gi");
  let result = string.match(regExp);
  if(result){
    return result.length;
  }else{
    return 0;
  }
}

function countTheseCharacters(string, regularExpressionsToCheck){
  let countedNumbers = [];
  regularExpressionsToCheck.forEach(function(character){
    countedNumbers.push({
      'character': character,    
      'occurances': countLetters(string, character)
    });
  });
  return countedNumbers;
}

let result = countTheseCharacters("Hello. I like Pizza. Do you like pizza too? The pizzaman, said he does as well!", ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "\\bpizza\\b","\\."]);
console.log(result);

以上是关于函数获取指定字符串中每个字母的出现次数的主要内容,如果未能解决你的问题,请参考以下文章

Java获取字符串中字母出现的个数

2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试

PHP如何统计指定字符串出现的次数

c语言编程。从标准输入设备上输入一个字符串,分别统计其中每个数字,空格,字母及其他字符出现的次数。

编写一个函数在指定的字符串中查找指定字符出现的次数

2021-10-30:有效的字母异位词。给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位