[LeetCode] Isomorphic Strings

아르당·2025년 10월 20일

LeetCode

목록 보기
49/68
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

두개의 문자열 s와 t가 주어졌을 때, 두 문자열이 동형인지 판별해라.
두 문자열 s와 t가 동형인 것은 s의 문자를 대체하여 t를 얻을 수 있기 때문이다.
모든 문자는 문자 순서를 유지하면서 다른 문자로 대체되어야 한다. 두 문자가 같은 문자에 매핑 될 수는 없지만, 문자는 자기 자신에게 매핑될 수 있다.

Example

#1
Input: s = "egg", t = "add"
Output: true
Explation:
문자열 s와 t는 동일하게 만들 수 있다.

  • e와 a 매핑
  • g와 d 매핑

#2
Input: s = "foo", t = "bar"
Output: false
Explation:
문자열 s와 t는 o가 a와 r에 둘 다 매핑되어야 해서 동일하게 만들 수 없다.

#3
Input: s = "paper", t = "title"
Output: true

Constraints

  • 1 <= s.length <= 5 * 10^4
  • t.length == s.length
  • s와 t는 유효한 아스키 문자로 구성된다.

Solved

HashMap을 사용해서 문제를 해결했다.

class Solution {
    public boolean isIsomorphic(String s, String t) {
        HashMap<Character, Character> charMap = new HashMap<>();

        for(int i = 0; i < s.length(); i++){
            char sc = s.charAt(i);
            char tc = t.charAt(i);

            if(charMap.containsKey(sc)){
                if(charMap.get(sc) != tc) return false;
            }else if(charMap.containsValue(tc)){
                return false;
            }
            
            charMap.put(sc, tc);
        }

        return true;
    }
}

주어진 문자열 s의 길이만큼 순회한다.
순회하면서 i번째에 있는 문자를 가져와서 HashMap에 있는지 확인한다.
있다면 키와 값을 비교해서 false를 반환한다. 조건문을 빠져 나온다면 맵에 추가한다.
반복문을 무사히 빠져나왔다면 true를 반환한다.

profile
내 마음대로 코드 작성하는 세상

0개의 댓글