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.
풀이
s
와 t
를 같이 순회한다.
두 문자열을 순회하며 문자를 키로, 매핑된 것을 값으로 가질 딕셔너리를 두 개 생성한다.
순회할 차례가 된 문자 두 가지 모두 각 딕셔너리에 없으면 딕셔너리에 추가해준다.
둘 중 하나만 딕셔너리에 없거나, 둘 다 딕셔너리에 있지만 두 문자가 딕셔너리에서 값으로 가진 문자가 다르면 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 라이센스를 따릅니다.