티스토리 뷰

728x90

 

주어진 두 문자열 s와 t가 애너그램 관계인지 여부를 반환하는 문제이다.
 

String s와 t를 매개변수로 받는 isAnagram메서드의 틀이 주어진다.

 

Problem :

class Solution {
    public boolean isAnagram(String s, String t) {

    }
}

풀이는 isAnagram 메서드에 작성하면 된다.
 

Solution : 

1. 두 문자열의 길이가 다르면 애너그램 관계일 수 없으므로, false를 사전 반환한다.

2. 알파벳 길이(26)의 숫자 배열을 선언하고,

    첫번째 문자열 s의 각 알파벳을 Ascii 코드표를 활용하여 배열에 카운팅한다.

    ('a'는 Ascii코드 상 97에 해당하지만, 메모리 사용 감소를 위해 - 'a'를 하게 되면 0번 인덱스에 위치시킬 수 있다.)

3. 두번째 문자열 t를 2번과 동일한 방법으로 카운팅 다운을 해야 한다.

    1) 카운팅 다운할 대상이 없으면 애너그램 관계가 아니므로 false를 반환한다.

    2) 대상이 있으면 카운팅 다운을 진행한다.

4. 문자열 끝까지 정상적으로 반복했다면 애너그램 관계이다.

public boolean isAnagram(String s, String t) {

    // 두 문자열의 길이가 다르면 애너그램일 수 없다.
    if (s.length() != t.length()) return false;

    // 알파벳 배열을 이용한 문자열 s 카운팅
    int[] alphabet = new int[26];
    for(char c : s.toCharArray()) {
        alphabet[c - 'a'] += 1;
    }

    // 문자열 s와 t 비교
    for(char c : t.toCharArray()) {
        if(alphabet[c - 'a'] <= 0) {
            return false;
        }
        alphabet[c - 'a'] -= 1;
    }

    return true;
}

 

 

TestCase :

Input: s = "anagram", t = "nagaram"
Output: true

Input: s = "rat", t = "car"
Output: false

 

728x90
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
04-29 04:52