將字串轉換為新字串,其中如果該字符在原始字串中僅出現一次,則新字串中的每個字符為“(”,如果該字符多次出現,則為“)”。找不到我犯錯的地方
"din" => "((("
"后退" => "()()()"
"成功" => ")())())"
"((@" => "))(("
const duplicateEncode = (word) => { let newString = ''; [...word.toLowerCase()].filter((e, i) => { if (word.indexOf(e) !== i) { newString = ')'; } else if (word.lastIndexOf(e) !== i ) { newString = ')'; } else newString = '('; }); return newString; }
uj5u.com熱心網友回復:
您的問題似乎是您正在使用.indexOf()and .lastIndexOf()on word,它同時包含大寫和小寫字母,但e始終是您輸入的小寫字符,這導致當它是大寫字母.indexOf()時.lastIndexOf()無法找到該字母。相反,將輸入的小寫版本存盤在一個新變數中,并在呼叫.indexOf()/時使用它.lastIndexOf():
const duplicateEncode = (word) => {
let newString = '';
const lowerWord = word.toLowerCase();
[...lowerWord].forEach((e, i) => {
if (lowerWord.indexOf(e) !== i) {
newString = ')';
} else if (lowerWord.lastIndexOf(e) !== i ) {
newString = ')';
} else newString = '(';
});
return newString;
}
console.log(duplicateEncode("din")); // "((("
console.log(duplicateEncode("recede")); // "()()()"
console.log(duplicateEncode("Success")); // ")())())"
console.log(duplicateEncode("(( @")); // "))(("
console.log(duplicateEncode("nGnnI)nPne@uwJ")); // ")())(()()((((("
您還應該使用.forEach()而不是,.filter()因為您沒有過濾并使用.filter()回傳的陣列。
這是另一種涉及創建 Map(類似于物件)的方法,它將每個字符的頻率保存為一個值。使用.replace()我們可以回傳一個新字串,我們根據每個字符是否出現多次來替換它:
const duplicateEncode = (word) => {
const lower = word.toLowerCase();
const charFreq = [...lower].reduce((map, c) => map.set(c, (map.get(c) ?? 0) 1), new Map);
return lower.replace(/./ug, (c) => charFreq.get(c) === 1 ? "(" : ")");
}
console.log(duplicateEncode("din")); // "((("
console.log(duplicateEncode("recede")); // "()()()"
console.log(duplicateEncode("Success")); // ")())())"
console.log(duplicateEncode("(( @")); // "))(("
console.log(duplicateEncode("nGnnI)nPne@uwJ")); // ")())(()()((((("
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/470733.html
標籤:javascript 细绳 重复
