当前位置: 首页 > 知识库问答 >
问题:

JAVASCRIPT统计字符串中小写字母的出现次数

姜俊民
2023-03-14

我有一个javascript问题,对此我感到非常困惑

编写一个函数stringCase,该函数接受一个大小写字符混合的字符串,并根据字符串具有更多的字母大小写返回全大写或全小写的字符串。如果字符串的大小写字符相等,则将字符串转换为所有小写。不包括任何循环、长度属性或本机方法(例外:toLowerCase()

我可以立即想到一些解决这个问题的方法,比如使用循环检查每个字符,或者使用替换方法和正则表达式并获得结果的长度。但是,提示禁止我使用循环、长度属性和本机方法。

任何帮助都将不胜感激。提前谢谢你!

共有2个答案

盛骏祥
2023-03-14

所以我的答案和JBallin的类似,只是我使用了一个频率计数器来跟踪大小写计数。这将减少辅助功能的移动零件数量。

function convertString(str) {
    // object to keep track frequency of upper/lower case letters
    const frequencyCounter = {
        upper: 0,
        lower: 0
    }

    let currentIndex = 0

    // helper function to increment frequencies of letters
    function checkCase() {
        const currentChar = str[currentIndex]

        // if current index is outside length of string and returns undefined
        // break recursive loop by returning
        if (!currentChar) return

        if (currentChar.toUpperCase() === currentChar) {
            frequencyCounter.upper +=1;
        } else {
            frequencyCounter.lower +=1;
        }

        // increment current index and recursively call helper function
        currentIndex++
        return checkCase()
    }

    // start helper function
    checkCase()

    // check for which case to convert the string to and return that string
    if (frequencyCounter.upper > frequencyCounter.lower) {
        return str.toUpperCase();
    } else {
        return str.toLowerCase();
    }
}
柯轶
2023-03-14

这里的技巧是使用递归进行循环。您可以手动跟踪指针和计数。

const stringCase = (s) => {
  let i = 0;
  let count = 0;

  const process = () => {
    const curr = s[i++];
    if (!curr) {
      return count <= 0 ? s.toLowerCase() : s.toUpperCase();
    }

    if (curr.toLowerCase() === curr) {
      count--
    } else {
      count++
    }

    return process();
  }
  
  return process();
};

console.log(stringCase('Aa') === 'aa');
console.log(stringCase('AaA') === 'AAA');
console.log(stringCase('aa') === 'aa');
console.log(stringCase('AA') === 'AA');
 类似资料:
  • 我知道计算列表项的简单出现次数非常简单: 但是我想知道如何做的是每次一个字符串出现在列表条目的子字符串中时计数。 例如,我想查看列表

  • count 方法用于检索指定字符串在另一字符串中出现的次数,如果检索的字符串不存在,则返回 0,否则返回出现的次数。 count 方法的语法格式如下: str.count(sub[,start[,end]]) 此方法中,各参数的具体含义如下: str:表示原字符串; sub:表示要检索的字符串; start:指定检索的起始位置,也就是从什么位置开始检测。如果不指定,默认从头开始检索; end:指定

  • 问题内容: 哟,所以我试图制作一个程序,可以接受用户输入的字符串,例如:“一次一次”,然后报告该字符串包含多少个大写和小写字母: 输出示例:字符串具有8个大写字母,字符串具有5个小写字母,即时消息应该使用字符串类而不是数组,有关如何开始使用此字符串的任何提示?在此先感谢,这是我到目前为止所做的:D! 问题答案: 只需创建发现小写或大写字母时递增的计数器,如下所示:

  • 本文向大家介绍java计算给定字符串中出现次数最多的字母和该字母出现次数的方法,包括了java计算给定字符串中出现次数最多的字母和该字母出现次数的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java计算给定字符串中出现次数最多的字母和该字母出现次数的方法。分享给大家供大家参考,具体如下: PS:这里再为大家推荐几款在线字符统计工具供大家参考: 在线字数统计工具: http://to

  • 本文向大家介绍JavaScript实现计算字符串中出现次数最多的字符和出现的次数,包括了JavaScript实现计算字符串中出现次数最多的字符和出现的次数的使用技巧和注意事项,需要的朋友参考一下 “计算出字符串中出现次数最多的字符是什么,出现了多少次?” 看到这个需求,我想大多数人应该首先想到的是转换成数组,再做处理,当然是可以解决问题的,然后这里提供一个巧妙的算法设计,无需转数组,可以很快解决问

  • 问题内容: 如何使用MySQL查询来计算大写字母?我现在正在尝试 但这给我一个错误的说法: 我猜,我不允许在AGAINST子句中使用列表,这很烂 那么,有没有办法实现这一目标? 问题答案: 试试这个功能- 例子: