728x90
205. Isomorphic Strings
문자열 s,t가 주어지고 s와 t가 동형체(isomorphic)인지 확인하는 문제이다.
즉 두 문자열이 동형체일 경우 s의 문자열 -> t로 변경 가능 하다는 뜻
class Solution {
public boolean isIsomorphic(String s, String t) {
HashMap<Character, Character> map = new HashMap<>();
int length = s.length();
for (int i = 0; i < length; i++) {
char sc = s.charAt(i);
char tc = t.charAt(i);
if (i == 0) {
map.put(sc, tc);
} else {
if (map.containsKey(sc)) {
if (map.get(sc) != tc) {
return false;
}
} else if (map.containsValue(tc)) {
return false;
}
}
map.put(sc, tc);
}
return true;
}
}
문제 풀이
- HashMap을 이용하여 Character : Character 형태로 매핑해준다.
- 반복문을 돌며 map을 채워주는데, 시작의 0인 경우는 무조건 map에 채워준다.
- 만약 이미 있는 key라면 value와 value가 될 Character를 비교해준다.
- 다르다면 false, 같으면 3번을 반복
- 혹은 만약 s에서 새로운게 나왔는데 t에 기존에 있던게 있으면 false
392. Is Subsequence
class Solution {
public boolean isSubsequence(String s, String t) {
int prev = 0;
int cnt = 0;
for (int i = 0; i < s.length(); i++) {
char sc = s.charAt(i);
for (int j = prev; j < t.length(); j++) {
if (sc == t.charAt(j)) {
cnt++;
prev = j + 1;
break;
}
}
}
if (cnt == s.length()) {
return true;
} else {
return false;
}
}
}
쉽게 생각하면 t문자열에 s문자열이 있는지 (순서를 지킨채) 물어보는 문제이다.
즉 t문자열 0번째 에서 s를 찾았다면 -> 그 다음은 t의 첫 번째부터 찾아야 한다.
문제 풀이
- s의 문자열 순서에 맞는지 확인하기 위해 첫 for문을 s를 중심으로 반복
- 그 안의 for문에서 t를 중심으로 하되, 직전에 찾은 index(prev)를 시작으로 한다.
- s의 값과, t의 값이 일치할 때 cnt를 하나씩 증가시켜준다.
- 모든 반복문이 끝나고 cnt와 s의 길이를 비교한다.
'알고리즘' 카테고리의 다른 글
알고리즘 BigO 간단 정리 (1) | 2024.01.07 |
---|---|
[Day5/75] LeetCode 75 (0) | 2023.04.24 |
[Day4/75] LeetCode 75 (0) | 2023.04.21 |
[Day3/75] LeetCode 75 (0) | 2023.04.20 |
[Day1/75] LeetCode 75 (0) | 2023.04.19 |