JavaScript实现提取句子最长单词算法输出错误问题求助
问题根因
你的代码核心逻辑错误是长度对比的基准字符串mystring在循环过程中从未更新,始终保持初始的空字符串状态。
按照你的设计思路,mystring应该存储当前遍历到的最长单词,用于和后续单词做长度对比,但你只在满足条件时更新了最长单词的下标index,没有同步更新mystring的值,这就导致所有长度大于0的单词都会触发下标更新逻辑,最终返回的实际是遍历到的最后一个非空单词,而非真正的最长单词。你测试用例出现返回United的异常结果,大概率是输入字符串的末尾/中间存在多余空格,拆分后的数组出现空元素,截断了后续正常单词的下标更新。
修复方案
只需要在更新下标index的同时,同步更新对比基准mystring即可,修改后的代码如下:
function longestWord(sentence) { // 存储最长单词在数组中的下标 let index = 0; // 存储当前最长单词,用于后续长度对比 let mystring = ""; // 拆分句子为单词数组 let arr = sentence.split(" "); // 遍历数组 for (let p = 0; p < arr.length; p++) { if (arr[p].length > mystring.length) { index = p; // 新增:同步更新当前最长单词 mystring = arr[p]; } } return arr[index]; } console.log(longestWord("I love the United States of America")); // 输出结果:America
你也可以省略mystring变量,直接用当前下标的单词长度和已记录的最长单词长度对比,简化代码:
function longestWord(sentence) { let arr = sentence.split(" "); let maxLengthIndex = 0; for (let p = 0; p < arr.length; p++) { if (arr[p].length > arr[maxLengthIndex].length) { maxLengthIndex = p; } } return arr[maxLengthIndex]; }
内容的提问来源于stack exchange,提问作者user16612111
相关产品推荐
相关产品推荐

