4
4
* @return {boolean }
5
5
*/
6
6
var 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 ) ;
31
25
}
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 ;
37
36
}
38
-
39
- return true ;
40
- } ;
37
+ }
38
+
39
+ return true ;
40
+ } ;
41
41
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) (상수 시간)
51
51
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