티스토리 뷰
| Question
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가 주어졌을 때 두 문자열이 isormorphic인지 판단하는 함수를 작성하라.
isormorphic의 조건은 아래와 같다.
- 문자열 s의 일부 문자를 교체했을 때 t로 만들 수 있어야 한다.
- 만약 s의 문자열의 일부 문자 a를 b로 교체했을때 t가 된다면 isormorphic이다.
- a를 b로 교체하기로 했다면 다른 문자는 b로 교체할 수 없고, a가 또 다른 문자열로 교체될 수도 없다.
Example 1:
Input: s = "egg", t = "add"
Output: true
Example 2:
Input: s = "foo", t = "bar"
Output: false
Example 3:
Input: s = "paper", t = "title"
Output: true
제약사항
- 1 <= s.length <= 5 * 10^4
- t.length == s.length
- s and t consist of any valid ascii character.
| Solution
문제를 풀 때 고려한 사항
- s and t consist of any valid ascii character. this means there can be another chracter except english spell.
- ascii code 범위 내 이기 때문에 size 256개 짜리 배열을 사용하거나, hash를 사용하면 될 것 같다.
Method 1
1. s를 기준으로 char 하나에 t의 char를 대칭 시킨다.
1-1. s를 기준으로 쌍을 이루는게 이미 있는 경우, 그 값이 같으면 넘어가고 다르면 false를 return 한다.
1-2. s를 기준으로 쌍을 이루는게 없는 경우
1-2-1 그 값이 이미 다른 char에 대칭이 되었는지 확인한다. 대칭된 게 있으면 false
1-2-2 대칭된게 없으면 쌍으로 만들어준다.
class Solution {
public:
bool isIsomorphic(string s, string t) {
map<char, char> my_map;
bool paired[256] = {0};
for(int i = 0; i < s.length(); i++) {
if(my_map.find(s[i]) != my_map.end()) {
if(my_map[s[i]] != t[i]) return false;
} else {
if(paired[t[i]] == true){
return false;
}else{
my_map[s[i]] = t[i];
paired[t[i]] = true;
}
}
}
return true;
}
};
- Time complexity : O(s)
- Space Complexity : O(1)
출처 : https://leetcode.com/problems/isomorphic-strings/
'IT > Problem Solving' 카테고리의 다른 글
Substring, Subsequence, Subset, SubArray 차이 (0) | 2022.10.28 |
---|---|
[C++] Interview Question : Find Minimum Canoe (0) | 2022.08.31 |
[C++] Interview Question : Pots of gold game (0) | 2022.08.25 |
[C++] Interview Question : find smallest range (0) | 2022.08.24 |
[C++] LeetCode : Number of Islands (0) | 2022.08.20 |
- Total
- Today
- Yesterday
- 기술면접
- PS
- 러스트 배우기
- DP
- C++
- 러스트 입문
- 자료구조
- 러스트
- Tree
- Medium
- 속초
- 반드시 알아야 할 자료구조
- algorithm
- 속초 맛집
- interview question
- 맛집
- 러스트 기초
- 솔직후기
- Problem Solving
- coding interview
- rust
- 코딩인터뷰
- ProblemSolving
- LeetCode
- 내돈내산
- 트리
- 인터뷰
- 알고리즘
- 리트코드
- Interview
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |