44 * @return {boolean }
55 */
66var isAnagram = function ( s , t ) {
7- const mapS = new Map ( ) ;
8- const mapT = new Map ( ) ;
9-
10- [ ...s ] . map ( ( item ) => {
11- if ( mapS . has ( item ) ) {
12- const itemCount = mapS . get ( item ) ;
13- mapS . set ( item , itemCount + 1 ) ;
14- } else {
15- mapS . set ( item , 1 ) ;
16- }
17- } ) ;
18-
19- [ ...t ] . map ( ( item ) => {
20- if ( mapT . has ( item ) ) {
21- const itemCount = mapT . get ( item ) ;
22- mapT . set ( item , itemCount + 1 ) ;
23- } else {
24- mapT . set ( item , 1 ) ;
25- }
26- } ) ;
27-
28- // NOTE - t가 s의 anagram이라는 뜻을 갯수가 같지않아도 된다고 이해했으나 anagram정의는 s구성원을 모자람,남김없이 t를만들 수 있는 상태
29- if ( mapS . size !== mapT . size ) {
30- return false ;
7+ const mapS = new Map ( ) ;
8+ const mapT = new Map ( ) ;
9+
10+ [ ...s ] . map ( ( item ) => {
11+ if ( mapS . has ( item ) ) {
12+ const itemCount = mapS . get ( item ) ;
13+ mapS . set ( item , itemCount + 1 ) ;
14+ } else {
15+ mapS . set ( item , 1 ) ;
16+ }
17+ } ) ;
18+
19+ [ ...t ] . map ( ( item ) => {
20+ if ( mapT . has ( item ) ) {
21+ const itemCount = mapT . get ( item ) ;
22+ mapT . set ( item , itemCount + 1 ) ;
23+ } else {
24+ mapT . set ( item , 1 ) ;
3125 }
32-
33- for ( const [ key , value ] of mapS ) {
34- if ( mapT . get ( key ) !== value ) {
35- return false ;
36- }
26+ } ) ;
27+
28+ // NOTE - t가 s의 anagram이라는 뜻을 갯수가 같지않아도 된다고 이해했으나 anagram정의는 s구성원을 모자람,남김없이 t를만들 수 있는 상태
29+ if ( mapS . size !== mapT . size ) {
30+ return false ;
31+ }
32+
33+ for ( const [ key , value ] of mapS ) {
34+ if ( mapT . get ( key ) !== value ) {
35+ return false ;
3736 }
38-
39- return true ;
40- } ;
37+ }
38+
39+ return true ;
40+ } ;
4141
42- // 시간복잡도: O(n)
43- // - 문자열 s와 t를 각각 한 번씩 순회: O(n) + O(n) = O(2n) = O(n)
44- // - Map 비교를 위한 순회: O(k), 여기서 k는 고유 문자 개수
45- // - 따라서 전체 시간복잡도는 O(n)
46- // 공간복잡도: O(1)
47- // - 두 개의 Map 객체 생성: mapS와 mapT
48- // - 각 Map은 최대 k개의 고유 문자를 저장 (k는 고유 문자 개수)
49- // - 소문자 영문자만 사용하므로 k ≤ 26 (a-z)
50- // - 따라서 전체 공간복잡도는 O(1) (상수 시간)
42+ // 시간복잡도: O(n)
43+ // - 문자열 s와 t를 각각 한 번씩 순회: O(n) + O(n) = O(2n) = O(n)
44+ // - Map 비교를 위한 순회: O(k), 여기서 k는 고유 문자 개수
45+ // - 따라서 전체 시간복잡도는 O(n)
46+ // 공간복잡도: O(1)
47+ // - 두 개의 Map 객체 생성: mapS와 mapT
48+ // - 각 Map은 최대 k개의 고유 문자를 저장 (k는 고유 문자 개수)
49+ // - 소문자 영문자만 사용하므로 k ≤ 26 (a-z)
50+ // - 따라서 전체 공간복잡도는 O(1) (상수 시간)
5151
52- // follow up: 유니코드 테스트 케이스. 큰 의미는 없음
53- console . log ( isAnagram ( "😀😀" , "😀😀😀" ) ) ;
54- // false
55- console . log ( isAnagram ( "한글글" , "글한글" ) ) ;
56- // true
57- console . log ( isAnagram ( "café" , "éfac" ) ) ;
58- // true
59- console . log ( isAnagram ( "Hello世界" , "世界Hello" ) ) ;
60- // true
61- console . log ( isAnagram ( "안녕 하세요" , "하세요 안녕" ) ) ;
62- // true
63- console . log ( isAnagram ( "Café" , "éfac" ) ) ;
64- // false
65- console . log ( isAnagram ( "Café" , "Éfac" ) ) ;
66- // false
52+ // follow up: 유니코드 테스트 케이스. 큰 의미는 없음
53+ // console.log(isAnagram("😀😀", "😀😀😀")); // false
54+ // console.log(isAnagram("한글글", "글한글")); // true
55+ // console.log(isAnagram("café", "éfac")); // true
56+ // console.log(isAnagram("Hello世界", "世界Hello")); // true
57+ // console.log(isAnagram("안녕 하세요", "하세요 안녕")); // true
58+ // console.log(isAnagram("Café", "éfac")); // false
59+ // console.log(isAnagram("Café", "Éfac")); // false
0 commit comments