Anagrams
References
この文書は、次のリンクの
The Coding Interview Bootcamp: Algorithms + Data Structures on Udemy
Solution 1. simpler ver. with RegExp関数 .関数 Solution 2. with for...in & if & RegExp
以上の画像から分かるように、関数
一緒に見る
正規表現の定理
この文書は、次のリンクの
Section 9. Anagrams
課程から抜粋します.The Coding Interview Bootcamp: Algorithms + Data Structures on Udemy
Solution 1. simpler ver. with RegExp
// my solution
function anagrams(stringA, stringB) {
const sortedStringA = stringA.split("").sort().join("").toLowerCase();
const sortedStringB = stringB.split("").sort().join("").toLowerCase();
return sortedStringA === sortedStringB;
}
console.log(anagrams("RAIL! SAFETY!", "fairy tales"));
// simpler ver. with RegExp
function anagrams(stringA, stringB) {
return cleanString(stringA) === cleanString(stringB);
}
function cleanString(str) {
return str.replace(/[\W]/g, "").toLowerCase().split("").sort().join("");
}
console.log(anagrams("RAIL! SAFETY!", "fairy tales"));
私が作ったコードはコンソールウィンドウとtestです.jsの結果値が一致しないため,正規式を用いた模範解答を基準に説明する.sort()
の方法で文字列をアルファベット順に整理して比較する方法はそれほど悪くないはずです.cleanString
は、正規式replace(/[\W]/g, "")
を経て、文字列str
から特殊文字を削除する、文字列をアルファベット順に並べ替えるanagrams
によって文字列stringA
とstringB
を比較し、一致する場合はtrue
を返します.function anagrams(stringA, stringB) {
const aCharMap = buildCharMap(stringA);
const bCharMap = buildCharMap(stringB);
// obj aCharMap의 key 개수와 bCharMap의 key 개수가 다르면 false 반환(다른 문자가 섞여 있다는 뜻)
if (Object.keys(aCharMap).length !== Object.keys(bCharMap).length) {
return false;
}
// obj aCharMap의 value of key와 bCharMap의 value of key를 비교해서 다르면 false(문자열 내 각 문자의 등장횟수)
for (let char in aCharMap) {
if (aCharMap[char] !== bCharMap[char]) {
return false;
}
}
return true;
}
function buildCharMap(str) {
const charMap = {};
// str을 RegExp 활용하여 특수문자, 공백, 숫자 등을 ""으로 치환하고 소문자로 반환
for (let char of str.replace(/[\W]/g, "").toLowerCase()) {
// obj charMap에 char를 key로 할당하고 새로운 값이면 '1', 존재하던 값이면 1을 증가
charMap[char] = charMap[char] + 1 || 1;
}
return charMap;
}
console.log(anagrams("RAIL! SAFETY!", "fairy tales"));
以上の画像から分かるように、関数
false
によって生成された2つのオブジェクトbuildCharMap
とaCharMap
とを比較して、bCharMap
の値を返す.一緒に見る
正規表現の定理
Reference
この問題について(Anagrams), 我々は、より多くの情報をここで見つけました https://velog.io/@mame-coder/aaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol