如何按字符首次出现顺序对字符串字符排序?附代码示例
修改后的代码
function main() { let input = prompt("Enter a string:").toLowerCase().replace(/\s/g, ""); // 记录字符首次出现的顺序 let charOrder = []; // 统计每个字符的出现次数 let charCount = {}; // 遍历输入字符串,统计次数并记录首次出现顺序 for (let char of input) { if (!charCount[char]) { charCount[char] = 0; charOrder.push(char); } charCount[char]++; } // 按首次出现顺序拼接结果,每个字符重复对应次数 let process = ""; for (let char of charOrder) { process += char.repeat(charCount[char]); } console.log(process); }
代码说明
- 输入处理:保留原逻辑,将输入转为小写并移除所有空格。
- 统计与记录顺序:
- 用
charOrder数组存储字符首次出现的顺序,确保后续拼接严格遵循该顺序。 - 用
charCount对象统计每个字符的出现次数,遍历输入时,若字符未被统计过,就将其加入charOrder并初始化次数为0,之后每遇到一次该字符就把次数加1。
- 用
- 生成结果:遍历
charOrder数组,对每个字符调用repeat()方法传入对应的出现次数,拼接成最终结果字符串。
验证示例
输入"Learning Center"时,处理后的输入为"learningcenter":
- 首次出现顺序:
['l', 'e', 'a', 'r', 'n', 'i', 'g', 'c', 't'] - 字符次数:
{l:1, e:3, a:1, r:2, n:3, i:1, g:1, c:1, t:1} - 最终拼接结果:
"l" + "eee" + "a" + "rr" + "nnn" + "i" + "g" + "c" + "t" = "leeearrnnnigct"
(注:若你的预期输出"leeearrnnigct"中n仅重复2次,可能是输入字符串的实际字符数差异,上述代码逻辑完全符合「按首次出现顺序,重复对应出现次数」的需求)
内容的提问来源于stack exchange,提问作者M Nasihul Umam
相关产品推荐
相关产品推荐

