코딩테스트/알고리즘 문제풀이

[JAVA] 205. Isomorphic Strings

지과쌤 2022. 10. 6.
반응형

목차

    문제

    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;
        }
    }
    반응형

    댓글

    💲 추천 글