有一個檔案,其中有很多行帶有一組隨機字母。掃描每一行,你需要找到恰好包含任意字母的兩個字母的行數,然后分別計算恰好包含任意字母的三個字母的行數。您需要將第一種情況的行數乘以第二種情況的行數得到結果。
如何優化此代碼或使其更好?
Strings in file example (we need sort it all and file can has infiniy amout of strings) : "prtkqyluibmtcwqaezjmhgfndx prtkqylusbsmcwvaezjmhgfndt prgkqyluibsocwvamzjmhgkndx prjkqyluibsocwvahzjmhgfnsx prtkqylcibsocwvzezjohgfndx prtkqyluiksocwziezjmhgfndx prikqyluiksocwvaezjmkgfndx prtkgyluibsocwvwezjehgfndx prtkqyluiysocwvaezjghxfndx prtkqwluibsoxwvaezjmhgfhdx prtkqylgibsocwvabzjmhzfndx prtknyltibnocwvaezjmhgfndx prdkqyluibrocwvaezjmhgnndx prtwqyluibsoctvcezjmhgfndx mrtkqyluibgocwvakzjmhgfndx"
我的代碼:
function solution(arrOfStrings) {
let sumOfTwo = 0;
let sumOfThree = 0;
for (const string of arrOfStrings) {
const chars = {};
for (const char of string) {
chars[char] = (chars[char] || 0) 1;
}
console.log(chars);
if (
Object.entries(chars)
.filter((char) => char[1] == 2)
.map((char) => char[0]).length > 0
) {
sumOfTwo = 1;
}
if (
Object.entries(chars)
.filter((char) => char[1] == 3)
.map((char) => char[0]).length > 0
) {
sumOfThree = 1;
}
}
return sumOfTwo * sumOfThree;
}
let fs = require("fs");
const text = fs.readFileSync("./someTextFile.txt").toString("utf-8");
const arr = text.split("\n");
solution(arr);
uj5u.com熱心網友回復:
這是可能的優化之一:
function solution(arrOfStrings) {
const out = arrOfStrings.reduce((o, s) =>
(o[s.length] || (o[s.length] = 1), o), {});
return (out[2] ?? 0) * (out[3] ?? 0);
}
let fs = require("fs");
const text = fs.readFileSync("./someTextFile.txt").toString("utf-8");
const arr = text.split("\n");
solution(arr);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/506632.html
標籤:javascript 算法 排序
