validAnagram解答

13762 ワード

説明する
function validAnagram(str, str2) {
	// 접근
	// 1. 두 스트링을 모두 아스키 코드로 바꿔서 두 배열에 각각 담는다.
	// 2. 두 배열을 sort시킨다.
	// 3. 두 배열을 비교한다.
	var map = Array.prototype.map;
	var a = map.call(str, function(x) {
		return x.charCodeAt(0);
	});

	var b = map.call(str2, function(x){
		return x.charCodeAt(0);
	})

	a.sort();
	b.sort();


	return JSON.stringify(a)===JSON.stringify(b);
}

console.log(validAnagram('','')); // true
console.log(validAnagram('aaz','zza')); // false
console.log(validAnagram('anagram','nagaram')); // true
console.log(validAnagram('rat','car')); // false
console.log(validAnagram('awesome','awesom')); // false
console.log(validAnagram('qwerty','qeywrt')); // true
console.log(validAnagram('texttwisttime','timetwisttext')); // true
まずは簡単に解けました
Stringでmapを使用して各文字のASCII符号化値を要素の配列として取得する方法
	var map = Array.prototype.map;
	var a = map.call(str, function(x) {
		return x.charCodeAt(0);
	});
Array.prototype.map.callでは、mapはArray、NodeList、Strで使用できます.
その後sortでソートしてJSON.stringify(a)===JSON.stringgify(b)を用いて配列の値を比較した.

配列値比較jsで何を書きますか?

  • https://all-dev-kang.tistory.com/entry/JavaScript-シナリオ-比較-3つの方法-兄貴の-ソリューション
  • 結果:

    O(N)で解くことに成功したが,ベストプラクティスかどうか考えなければならない.
    別の解釈
    
    function validAnagram_(first, second) {
        if (first.length !== second.length) {
            return false;
        }
    
        const letter = {};
        for (let i = 0; i < first.length; i++) {
            if (!letter[first[i]]) {
                letter[first[i]] = 1;
            } else {
                letter[first[i]] += 1;
            }
        }
    
        for (let i = 0; i < second.length; i++) {
            if (!letter[second[i]]) {
                return false;
            } else {
    					letter[second[i]] -= 1;
            }
        }
    		return true;
    }
  • 文字オブジェクトに、キーとして対応する文字列を入力し、個数を値とします.
  • の2番目の文字列では、アルファベットオブジェクトの対応する文字列の個数をアルファベットオブジェクトから減算し、文字列が0または存在しない場合falseを返します.
  • のオーバーラップループではなく2つのfor文で簡単に問題を解決した.
  • 私は私の答えがもっと好きです.