gpt4 book ai didi

javascript - 在遍历数组中有序的一系列字母时,如何避免将三次重复计数为对?

转载 作者:行者123 更新时间:2023-11-30 17:25:16 25 4
gpt4 key购买 nike

我写了一个简单的程序来分析一个字符串,找出其中重复字母最多的单词。它本质上是获取一个给定的字符串,将其分解为一组单独的单词,然后将每个单独的单词分解为按字母顺序排列的单个字母组(然后将它们作为 prevnext 进行比较,一次 2 个,因为包含数组被迭代)。找到的任何两个相邻且匹配的值都会在相关单词旁边的哈希文件中添加一个计数,并且在最后返回具有最多重复字母对的单词。在任何单词中都找不到匹配对返回 -1。这是它应该做的。

下面,我遇到了一个问题:如果我不使用 REGEXP 来替换我匹配的字符之一,那么我的代码会给出误报,因为它将计算三次(例如,“EEE”),作为两个分开的对,(例如,“EEE”=“EE & EE”,而不是被视为“EE, E”)。但是,如果我确实使用下面的 REGEXP 来防止三次重复计数,那么这样做会中断我的循环,并跳到下一个单词。有没有办法让这种方式起作用?如果不是,使用 REGEXP 会更好,它会删除除有问题的重复字符之外的所有字符,然后也许我可以将每个单词的 .length 除以 2 以获得剩余的对数?关于如何解决这个问题的任何想法都会有很大帮助。

var str = "Helloo aplpplpp pie"; 
//var str = "no repting letrs";
//var str = "ceoderbyte";

function LetterCountI(str) {
var input = str.split(" ");
console.log(input);
console.log("\n")
var hashObject = {};
var word = "";
var count = 0;

for(var i = 0; i<input.length; i++) {
var currentItem = input[i];
var currentWordIntoChars = currentItem.split("").sort();
console.log(currentWordIntoChars);
var counter = 0;

for(var j=1; j<currentWordIntoChars.length; j++) {
console.log(currentWordIntoChars[j-1] + "=currentChar j-1");
console.log(currentWordIntoChars[j] + "=prev j");
console.log("-");
var final = currentItem;

if(currentWordIntoChars[j-1] == currentWordIntoChars[j]) {
counter++;
hashObject[final] = counter;
//currentWordIntoChars = currentWordIntoChars[j-1].replace(/[a-z]/gi, String.fromCharCode(currentItem.charCodeAt(0)+1));
//HERE REPLACE j-1 with random# or something
//to avoid 3 in a row being counted as 2 pair
//OR use regexp to remove all but pairs, and
//then divide .length/2 to get pairs.
console.log(counter + " === # total char pairs");

}
if(count<hashObject[currentItem]) {
word = final;
count = hashObject[currentItem];
}
}
}
console.log(hashObject);
console.log("\n");
for (var o in hashObject) if (o) return word;
return -1;

}
console.log(LetterCountI(str));

最佳答案

另一种方法是替换已排序单词中的重复字符:

var str = "Helloo aplpplpp pie"; 

function LetterCountI(str) {

var input = str.split(" ");
var count = 0;
var result = -1;

for(var i = 0; i<input.length; i++) {
var nb = 0;
var sortedItem = input[i].split("").sort().join("");

sortedItem.replace(/(.)\1/g, function (_) { nb++ });

if (nb > count) {
count = nb;
result = input[i];
}
}

return result;
}

console.log(LetterCountI(str));

注意:replace 方法只是一种使用回调函数递增nb 的方法。您可以使用 match 方法和计算结果来执行相同的操作。

如果两个单词的重复次数相同,则默认返回第一个单词。您可以使用 if 语句的条件轻松更改此行为。

关于javascript - 在遍历数组中有序的一系列字母时,如何避免将三次重复计数为对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24398196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com