-
[LeetCode] 205. Isomorphic Strings알고리즘 문제 풀이 2021. 7. 13. 12:50
문제 출처: https://leetcode.com/problems/isomorphic-strings/
Isomorphic Strings - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
문제
두 문자열
s
와t
가 주어지면, 동일 구조의 문자열인지 아닌지 결정하라.두 문자열
s
와t
가 만약s
의 문자들을 다른 문자로 대체했을 때t
를 얻을 수 있다면 동일 구조라 한다.모든 문자의 발생빈도는 다른 문자와 순서를 유지하면서 대체되어야 한다. 두 문자가 동일 문자로 매핑되어서는 안 되지만, 한 문자가 자신과 매핑될 수 있다.
예제
Input: s = "paper", t = "title" Output: true
Input: s = "foo", t = "bar" Output: false
풀이
문자열
s
와t
를 순회하면서s
의 문자와t
문자를 매핑해간다. 매핑 과정에서 한가지 확인해줘야 하는 건,s[i]
문자가 이전에 어떤 문자와 매핑이 되었던 적이 있는지, 있다면 현재 매핑하려고 하는 문자t[i]
와 동일한 문자인지 체크하는 것이다.현재까지의 내용을 코드로 작성하면 아래와 같다.
var isIsomorphic = function(s, t) { const sDic = new Map(); for (let i = 0; i < s.length; i++) { if (sDic.has(s[i]) && sDic.get(s[i]) != t[i]) { return false; } sDic.set(s[i], t[i]); } return true; }
이 코드를 제출하게 되면,
s = "badr"
,t = "babc"
에서 틀린 답을 내놓는다. 그 이유는 아래와 같다.s = "badr", t = "babc" 1) s[0] -> t[0] 매핑 : b -> b 2) s[1] -> t[1] 매핑 : a -> a 3) s[2] -> t[2] 매핑 : d -> b => s 문자열의 b와 d가 동일한 문자인 b 문자로 매핑되는 문제 발생!!!! 4) s[3] -> t[3] 매핑 : r -> c
문자열
s
의 3번째 문자d
가t
의 3번째 문자b
와 매핑시키면,s
이 첫 문자b
와 세 번째 문자d
가 문자b
로 매핑되는 문제가 발생하는데 이를 탐지하는 부분이 없기 때문이다.이 문제를 해결하기 위해서
t
의 문자가s
의 어떤 문자와 매핑되어 있는지에 대한 추가 정보를 저장할 필요성이 있고, 이를 이용하여 다음의 코드와 같이 문제를 해결할 수 있다.var isIsomorphic = function(s, t) { const sDic = new Map(); // s[i]가 어떤 문자와 매핑되는지 저장 const tDic = new Map(); // t[i]는 s의 어떤 문자와 매핑되어 있는지 저장 for (let i = 0; i < s.length; i++) { if (sDic.has(s[i]) && sDic.get(s[i]) != t[i]) { return false; } if (!sDic.has(s[i])) { // t[i]문자로 매핑되어 있는 s 문자가 있는지 체크 // 있다면, 현재 s[i]와 동일한 문자인가? if (tDic.has(t[i]) && tDic.get(t[i]) != s[i]) { return false; } sDic.set(s[i], t[i]); tDic.set(t[i], s[i])); } } return true; }
Github: 205.js
opwe37/Algorithm-Study
Contribute to opwe37/Algorithm-Study development by creating an account on GitHub.
github.com
'알고리즘 문제 풀이' 카테고리의 다른 글
[LeetCode] 791. Custom Sort String (0) 2021.07.15 [LeetCode] 1161. Maximum Level Sum of a Binary Tree (0) 2021.07.14 [LeetCode] 295. Find Median from Data Stream (0) 2021.07.12 [LeetCode] 718. Maximum Length of Repeated Subarray (0) 2021.07.09 [LeetCode] 378. Kth Smallest Element in a Sorted Matrix (0) 2021.07.08