|
| 1 | +/** |
| 2 | + * Source: https://leetcode.com/problems/valid-anagram/ |
| 3 | + * ์์ : ๋ ๋ฌธ์์ด์ด ์ ๋๊ทธ๋จ์ธ์ง ํ์ธํ๋ ํจ์ |
| 4 | + * ํ์ด ์๊ฐ: 5๋ถ |
| 5 | + * ํ์ด๋ฐฉ๋ฒ: ๋ฌธ์์ด์ ์ ๋ ฌํ์ฌ ๋น๊ตํ๋ ๋ฐฉ๋ฒ๊ณผ ๋ฌธ์ ๋น๋์๋ฅผ ์นด์ดํ
ํ๋ ๋ฐฉ๋ฒ |
| 6 | + * ์๊ฐ๋ณต์ก๋: O(n log n) - ์ ๋ ฌ์ด ์ง๋ฐฐ์ ์ธ ์ฐ์ฐ |
| 7 | + * ๊ณต๊ฐ๋ณต์ก๋: O(n) - ๋ฌธ์์ด์ ๋ฐฐ์ด๋ก ๋ณํํ๊ธฐ ์ํ ๊ณต๊ฐ |
| 8 | + */ |
1 | 9 | function isAnagram(s: string, t: string): boolean {
|
2 | 10 | if (s.length !== t.length) return false;
|
3 | 11 | return s.split("").sort().join() === t.split("").sort().join();
|
4 | 12 | }
|
| 13 | + |
| 14 | +/** |
| 15 | + * Solution2: ์๋ฃ๊ตฌ์กฐ Map์ ์ฌ์ฉํด์ ๋ฌธ์ ๋น๋๋ฅผ ๊ณ์ฐํด ๋ ๋ฌธ์์ด์ด ์ ๋๊ทธ๋จ์ธ์ง ํ์ธํ๊ธฐ |
| 16 | + * ํ์ด ์๊ฐ: 23๋ถ |
| 17 | + * ์๊ฐ๋ณต์ก๋: O(n) - ๋จ์ผ ์ํ๋ก ํด๊ฒฐ |
| 18 | + * ๊ณต๊ฐ๋ณต์ก๋: O(1) - ์ต๋ 26๊ฐ ์ํ๋ฒณ์ ๋ํ ๊ณ ์ ํฌ๊ธฐ ๋งต ์ฌ์ฉ |
| 19 | + */ |
| 20 | +function isAnagram2(s: string, t: string): boolean { |
| 21 | + // ๊ธธ์ด๊ฐ ๋ค๋ฅด๋ฉด ์ ๋๊ทธ๋จ์ด ๋ ์ ์์ |
| 22 | + if (s.length !== t.length) return false; |
| 23 | + |
| 24 | + // ๊ฐ ๋ฌธ์์ ์ถํ ๋น๋๋ฅผ ๊ธฐ๋กํ ๋ชฉ์ ์ผ๋ก Map์ ์ฌ์ฉ |
| 25 | + const charCount = new Map<string, number>(); |
| 26 | + |
| 27 | + // ์ฒซ ๋ฒ์งธ ๋ฌธ์์ด์ ๊ฐ ๋ฌธ์ ๋น๋ ์ฆ๊ฐ |
| 28 | + for (const char of s) { |
| 29 | + charCount.set(char, (charCount.get(char) || 0) + 1); |
| 30 | + } |
| 31 | + |
| 32 | + // ๋ ๋ฒ์งธ ๋ฌธ์์ด์ ๊ฐ ๋ฌธ์ ๋น๋ ๊ฐ์ |
| 33 | + for (const char of t) { |
| 34 | + const count = charCount.get(char); |
| 35 | + |
| 36 | + // ๋ฌธ์๊ฐ ์๊ฑฐ๋ ๋น๋๊ฐ 0์ด๋ฉด ์ ๋๊ทธ๋จ์ด ์๋ |
| 37 | + if (count === undefined || count === 0) return false; |
| 38 | + |
| 39 | + charCount.set(char, count - 1); |
| 40 | + } |
| 41 | + |
| 42 | + return true; |
| 43 | +} |
0 commit comments