(アルゴリズム)Codewars:chracterFrequency
14729 ワード
Description
Write a function that takes as its input a string and returns an array of
arrays as shown below sorted in descending order by frequency and then by
ascending order by character.
:: Example ::
characterFrequency('mississippi') ===
[
['i', 4],
['s', 4],
['p', 2],
['m', 1]
]
:: Example2 ::
characterFrequency('miaaiaaippi') ===
[
['a', 4],
['i', 4],
['p', 2],
['m', 1]
]
:: Example3 ::
characterFrequency('mmmaaaiiibbb') ===
[
['a', 3],
['b', 3],
['i', 3],
['m', 3]
]
var characterFrequency = function (string) {
};
問題を解く
文字列が入力されている場合は、重複する文字列の個数を表す数値と文字を配列に並べ替え、2 D配列の問題に戻ります.
に答える
これはハッシュ問題です.したがって、オブジェクトを初めて作成して配列でアクセスすると、問題を簡単に解決できます.
Object.entries(obj)
を使用してオブジェクトを2 Dソートします.(反対にObject.assing({}, arr)
)資料を了解する
// 반복되지 않는 첫 번째 문자열 반환하기
// 해쉬
function solution(s) {
let answer;
let obj={};
for (let x of s) {
if (obj[x]) {
obj[x] += 1;
} else {
obj[x] = 1;
}
}
answer = Object.entries(obj).sort();
return answer.sort((a, b) => b[1] - a[1]);
}
const s = 'mississippi';
const n = 'miaaiaaippi';
const x = 'mmmaaaiiibbb';
console.log(solution(s));
console.log(solution(n));
console.log(solution(x));
その他の質問に答える
export default function characterFrequency (string) {
let convertToObj = string
.split("")
.sort()
.reduce((all, one) => {
if (one in all) {
all[one]++
} else {
all[one] = 1;
}
return all
}, {});
let converToArray = [];
for(let key in convertToObj) {
converToArray.push([key, convertToObj[key]])
}
converToArray.sort((a, b) => {
return b[1] - a[1]
});
return converToArray;
};
本当に柔軟に問題を解決し,reduceは本当に複雑なアルゴリズム式を簡潔にまとめた.accロビンオブジェクトを宣言し、oneとして表されるbellクラスのすべてのキー値にif文でbellクラスを増減する方法が使用されます.次に、オブジェクトで、ソートのために空の配列を再宣言し、キー値を遍歴し、キー値に対応するbellクラスを割り当てます.
JavaScriptの柔軟性は、2層配列の要素にアクセスする際に非常に優れています.
return b[1] - a[1]
は、このようにコードを簡潔に整理することができる.
Reference
この問題について((アルゴリズム)Codewars:chracterFrequency), 我々は、より多くの情報をここで見つけました https://velog.io/@yunsungyang-omc/codeWars-chracterFrequencyテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol