有几个类似的问题,但是,我不是要搜索特定的字符或字母,也不是要查找具有重复字母的第一个单词。另外,我想直接用 javascript 来做这件事。
我正在尝试构建一个函数,它将字符串作为输入,遍历字符串中的每个单词并返回具有最多重复字母的单词。如果有多个单词具有相同数量的重复字母(无论是 1 个还是更多)我想返回多个单词。
这是我目前所拥有的,但它返回字符串中的所有单词,而不是仅返回字母重复次数最多的单词。我无法弄清楚如何只返回重复次数最多的单词:
function repeatedLetterCounter(str) {
str = str.toLowerCase();
var wordArray = str.split(" ");
var results = [];
for (var i = 0; i < wordArray.length; i++) {
var countNew = 0;
var count = 0;
var word = wordArray[i];
for (var a = 0; a < word.length; a++) {
var letter = word[a];
for (var b = a + 1; b < word.length; b++) {
var nextLetter = word[b];
if (letter === nextLetter) {
countNew += 1;
}
}
}
if (countNew > count) {
count = countNew;
results.push(wordArray[i]);
} else if (countNew === count) {
results.push(wordArray[i]);
}
}
return results;
}
console.log(repeatedLetterCounter("No, Bob ran across the Mississippi."));
这是我的 fiddle .
最佳答案
我不会从头开始生成新代码,而是获取您的代码并显示问题所在:
1。为什么您的代码返回所有单词
看看这段代码,我在其中隐藏了一些部分:
for (var i = 0; i < wordArray.length; i++) {
var count = 0;
// two nested loops open and close here //
// ...
if (countNew > count) {
count = countNew;
results.push(wordArray[i]);
// ...
}
}
此代码显示在每次迭代中您将 count 重置为零,因此末尾的 if
将始终为真。结果,您得到了结果中的所有单词。
2。计数器太高
当你增加 countNew 时,即使你已经在检查下一个字符,你也会继续增加它,所以最后它会计算你正在查看的单词中所有字母重复的总数,而不区别。
3。计数水平
您目前使用 2 个计数变量,但实际上需要 3 个:
- count:在任何单词中找到的最大重复次数
- countThisWordsBestLetter:在当前单词中找到的最高重复
- countLetter:当前单词中当前字母的重复次数
4。更正代码
function repeatedLetterCounter(str) {
str = str.toLowerCase();
var wordArray = str.split(" ");
var results = [];
var count = 0;
for (var i = 0; i < wordArray.length; i++) {
var word = wordArray[i];
var countThisWordsBestLetter = 0;
for (var a = 0; a < word.length; a++) {
var countLetter = 0;
var letter = word[a];
for (var b = a + 1; b < word.length; b++) {
var nextLetter = word[b];
if (letter === nextLetter) {
countLetter += 1;
}
}
if (countLetter > countThisWordsBestLetter) {
countThisWordsBestLetter = countLetter;
}
}
if (countThisWordsBestLetter > count) {
// forget any words we gathered before:
results = [];
}
if (countThisWordsBestLetter >= count) {
count = countThisWordsBestLetter;
results.push(wordArray[i]);
}
}
return results;
}
console.log(repeatedLetterCounter("No, Bob ran across the Mississippi."));
// for this snippet only:
document.write( JSON.stringify(repeatedLetterCounter("No, Bob ran across the Mississippi.")));
关于javascript - 使用javascript中的嵌套for循环返回一串单词中重复次数最多的字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35256783/