포스트

Valid Anagram

LeetCode 242. Valid Anagram

원문

Given two strings s and t, return true if t is an anagram of s, and false otherwise.

An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.

풀이

Python

collections 모듈의 CounterCounter.most_common() 메서드를 사용한다.
두 문자열에 있는 문자를 Counter를 이용하여 센다.
그 다음 sorted().most_common()을 사용하여 정렬된 결과 리스트 두 개를 비교해 같으면 True, 다르면 False를 반환한다.

Counter를 쓰지 않고 두 개의 딕셔너리를 만들어 sorted()key 파라미터와 람다함수를 이용해 정렬할 수도 있다.
이 경우의 정렬: sorted(sDict, key=lambda x:(x[1], x[0]))
.most_common()를 쓴 경우와 같은 상태가 되려면 x[1] 대신 -x[1]을 사용하면 된다.

Java

HashMap을 사용한다. 로직 자체는 파이썬 풀이와 다르지 않다.

코드

Python

1
2
3
4
5
6
7
8
9
from collections import Counter


class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        sCounter = sorted(Counter(s).most_common())
        tCounter = sorted(Counter(t).most_common())
        if sCounter == tCounter: return True
        return False

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.HashMap;

class Solution {
    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer, Integer> numDict = new HashMap<>();
        int[] result = {0, 0};

        for (int i = 0; i < nums.length; i++) {
            numDict.put(nums[i], i);
        }

        for (int i = 0; i < nums.length; i++) {
            if (numDict.containsKey(target - nums[i])) {
                if (i != numDict.get(target - nums[i])) {
                    result[0] = i;
                    result[1] = numDict.get(target - nums[i]);
                    break;
                }
            }
        }

        return result;
    }
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.