포스트

Isomorphic Strings

LeetCode 205. Isomorphic Strings

원문

Given two strings s and t, determine if they are isomorphic.

Two strings s and t are isomorphic if the characters in s can be replaced to get t.

All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character, but a character may map to itself.

풀이

st를 같이 순회한다.
두 문자열을 순회하며 문자를 키로, 매핑된 것을 값으로 가질 딕셔너리를 두 개 생성한다.
순회할 차례가 된 문자 두 가지 모두 각 딕셔너리에 없으면 딕셔너리에 추가해준다.
둘 중 하나만 딕셔너리에 없거나, 둘 다 딕셔너리에 있지만 두 문자가 딕셔너리에서 값으로 가진 문자가 다르면 False를 반환한다.
순회를 끝냈다면 True를 반환한다.

코드

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution:
    def isIsomorphic(self, s: str, t: str) -> bool:
        sdict = dict()
        tdict = dict()
        ref = 0

        for i in range(len(s)):
            if s[i] not in sdict and t[i] not in tdict:
                sdict[s[i]] = ref
                tdict[t[i]] = ref
                ref += 1
            elif s[i] not in sdict or t[i] not in tdict: break
            else:
                if sdict[s[i]] != tdict[t[i]]: break
        else: 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 boolean isIsomorphic(String s, String t) {
        HashMap<Character, Integer> sMap = new HashMap<>();
        HashMap<Character, Integer> tMap = new HashMap<>();
        int ref = 0;

        for (int i = 0; i < s.length(); i++) {
            if (!sMap.containsKey(s.charAt(i)) && !tMap.containsKey(t.charAt(i))) {
                sMap.put(s.charAt(i), ref);
                tMap.put(t.charAt(i), ref);
                ref++;
            } else if (!sMap.containsKey(s.charAt(i)) || !tMap.containsKey(t.charAt(i))) {
                return false;
            } else {
                if (sMap.get(s.charAt(i)) != tMap.get(t.charAt(i))) {
                    return false;
                }
            }
        }
        return true;
    }
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.