字符串最高得分单词计算:代码返回结果错误求助
修正计算单词得分并返回最高分单词的函数
任务说明
给定一个字符串,返回得分最高的单词,得分规则如下:
- 每个元音(
["a", "e", "i", "o", "u", "y"])加1分 - 每个辅音
["b", "d"]减1分
示例:
- 单词"butterfly"得分为2:3个元音("u","e","y")加3分,辅音"b"减1分
- 单词"day"得分为2:2个元音("a","y")加2分
现有代码问题
以下是我写的代码,但传入"what a beautiful day"时,函数返回最后一个单词"day",而非得分最高的"beautiful":
function countVowels(string) { let vowels = ["a", "e", "i", "o", "u"] let constants = ["b", "d"] let words = string.trim().split(" ") let highestScore = " "; let count =0; for(const c of words){ for (let i=0; i<c.length; i++){ if(vowels.includes(c[i])) { highestScore = c count++; } else if (constants.includes(c[i])) count-- } } console.log(highestScore) return highestScore; } countVowels("what a beautiful day")
问题分析
- 元音数组缺失元素:规则里的元音包含
y,但代码中vowels数组没加,导致计算时少统计y的得分 - 全局分数变量错误:只用一个全局
count累加所有单词的分数,无法单独计算每个单词的得分 - 最高分更新逻辑错误:遇到元音就直接把当前单词设为
highestScore,没有比较当前单词的分数和历史最高分,最终只会返回最后一个被遍历到的单词
修正后的代码
function countVowels(string) { // 修正元音数组,加入规则要求的y const vowels = ["a", "e", "i", "o", "u", "y"]; const consonants = ["b", "d"]; const words = string.trim().split(" "); let highestScoreWord = ""; let highestScore = -Infinity; // 初始设为极小值,确保第一个单词能被选中 for (const word of words) { let currentScore = 0; // 每个单词单独计算得分,初始化当前分数 for (const char of word) { if (vowels.includes(char)) { currentScore++; } else if (consonants.includes(char)) { currentScore--; } // 其他字符不影响分数,无需处理 } // 比较当前单词分数与最高分,更新最高分和对应单词 // 如果分数相同,保留先出现的单词(符合示例中beautiful先出现则返回它的逻辑) if (currentScore > highestScore) { highestScore = currentScore; highestScoreWord = word; } } console.log(highestScoreWord); return highestScoreWord; } countVowels("what a beautiful day"); // 输出:beautiful
代码说明
- 为每个单词单独初始化
currentScore,确保每个单词的得分独立计算 - 修正元音数组,加入
y,符合规则要求 - 初始最高分设为
-Infinity,保证第一个单词的分数一定能替换初始值 - 只有当当前单词分数高于历史最高分,才更新最高分和对应单词,分数相同时保留先出现的单词
内容的提问来源于stack exchange,提问作者reactjs
相关产品推荐
相关产品推荐

