gpt4 book ai didi

javascript - 重复编码器(字符串中的重复字母)

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

目标是将字符串转换为新字符串,其中新字符串中的每个字符是“(”,如果该字符在原始字符串中只出现一次,或“)”,如果该字符在原始字符串中出现多次字符串。在确定字符是否重复时忽略大写。

我的问题是,如果它重复一个字母,第一个括号就会显示错误。

function duplicateEncode(word){

var repeat = [];
var result = [];
var letters = word.split('');
for (i=0; i < letters.length; i++){
if (repeat.indexOf(letters[i]) > -1) {
result.push(")");
} else {
result.push("(");
}
repeat.push(letters[i]);
}
return result.join("");
}
console.log(duplicateEncode("aleluia"))

最佳答案

"my problem is if it's repeating a letter first parenthesis is showing wrong."

这是因为您的代码没有进行任何前瞻,它只检查已经处理了哪些字符。您需要通过某种方式检查当前字母是否也在字符串中出现在之前。

我想到的第一种方法是从计算所有字母开始(将计数放在一个对象中),然后根据每个字母的计数映射每个字母。这样你就可以只循环遍历原始单词两次:

function duplicateEncode(word){
var letterCount = {};
var letters = word.toLowerCase().split('');

letters.forEach(function(letter) {
letterCount[letter] = (letterCount[letter] || 0) + 1;
});

return letters.map(function(letter) {
return letterCount[letter] === 1 ? '(' : ')';
}).join('');
}

console.log(duplicateEncode("aleluia"))
console.log(duplicateEncode("AleLuia"))
console.log(duplicateEncode("No duplicates"))
console.log(duplicateEncode("All duplicated ALL DUPLICATED"))

或者与 .reduce() 相同和 arrow functions只有三行:

function duplicateEncode(word){
const letters = word.toLowerCase().split('');
const counts = letters.reduce((ct, ltr) => ((ct[ltr] = (ct[ltr] || 0) + 1), ct), {});
return letters.map(letter => counts[letter] === 1 ? '(' : ')').join('');
}

console.log(duplicateEncode("aleluia"))
console.log(duplicateEncode("AleLuia"))
console.log(duplicateEncode("No duplicates"))
console.log(duplicateEncode("All duplicated ALL DUPLICATED"))

关于javascript - 重复编码器(字符串中的重复字母),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45094264/

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