반응형
목차
문제
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.
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
Constraints:
- 1 <= s.length <= 5 * 104
- t.length == s.length
- s and t consist of any valid ascii character.
아이디어
- 문자열 패턴
- 두 문자를 서로 비교하지 말고, 각 문자가 해시맵에 저장되는 패턴이 일치하는가? 를 확인해보자
String 1: A B E A C D B
index pattern: 0 1 2 0 4 5 1
String 2: X Y I X H K Y
index pattern: 0 1 2 0 4 5 1
풀이
class Solution {
public boolean isIsomorphic(String s, String t) {
//input param 체크
if (s == null || t == null) {
return false;
}
if (s.length() != t.length()) {
return false;
}
//해시맵 선언 -> char, int(인덱스)
Map<Character, Integer> mapS = new HashMap<Character, Integer>();
Map<Character, Integer> mapT = new HashMap<Character, Integer>();
//한단어씩 확인하면서 확인
//s와 t가 같은 형태로 배열되어있다면, 단어별 map에 등록되는 index도 같게되므로 아래 로직으로 확인 가능하다.
for (int i = 0; i < s.length(); i++) {
int indexS = mapS.getOrDefault(s.charAt(i), -1);
int indexT = mapT.getOrDefault(t.charAt(i), -1);
if (indexS != indexT) {
return false;
}
mapS.put(s.charAt(i), i);
mapT.put(t.charAt(i), i);
}
return true;
}
}
반응형
'코딩테스트 > 알고리즘 문제풀이' 카테고리의 다른 글
[JAVA] 876. Middle of the Linked List (0) | 2022.10.15 |
---|---|
[JAVA] 392. Is Subsequence (0) | 2022.10.12 |
[JAVA][Codility] OddOccurrencesInArray (0) | 2022.09.30 |
[JAVA][Codility] CyclicRotation (0) | 2022.09.30 |
[JAVA] 338. Counting Bits (0) | 2022.09.21 |
댓글