如何解决JAVASCRIPT 计算字符串中小写字母的出现次数
我有一个 javascript 问题,我很困惑
编写一个 stringCase 函数,它接受一个包含大写和小写字符的字符串,并根据字符串中的哪个字母大写返回全大写或全小写的字符串。如果字符串的大小写字符相等,则将字符串全部转换为小写。请勿包含任何循环、长度属性或本机方法(例外:允许的 toLowerCase() 和 toUpperCase())。
我可以立即想到解决这个问题的几种方法,比如使用循环来检查每个字符,或者使用替换方法和正则表达式并获取结果的长度。但是,提示禁止我使用循环、长度属性和本机方法。
任何帮助将不胜感激。提前致谢!
解决方法
这里的技巧是使用递归来进行循环。您可以手动跟踪指针和计数。
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');
所以我的回答与 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();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。