단어 패턴

Jan 01 2023
오늘의 Leetcode 문제 [ 2023년 1월 1일 ]
패턴과 문자열 s가 주어지면 s가 동일한 패턴을 따르는지 확인합니다. 여기서 팔로우는 패턴의 문자와 s의 비어 있지 않은 단어 사이에 전단사가 있는 완전 일치를 의미합니다.

patterna 및 문자열 이 주어지면 동일한 패턴을 따르는지 s찾습니다 .s

여기서 팔로우pattern 는 문자 in 과 비어 있지 않은 단어 사이에 전단사가 있는 완전 일치를 의미합니다 s.

예 1:

Input: pattern = "abba", s = "dog cat cat dog"
Output: true

Input: pattern = "abba", s = "dog cat cat fish"
Output: false

Input: pattern = "aaaa", s = "dog cat cat dog"
Output: false

우리가 알고 있듯이

"아바" -> "개 고양이 고양이 개"

'a' -> "개"

'b' -> "고양이"

문자열이 다른 맵을 만나면 유효한 테스트 케이스가 아니라고 말할 수 있습니다.

"압파" -> "개 고양이 개 개"

리트코드#290. 단어 패턴

'a' -> "개"

'b' -> "고양이"

'f' -> "개"

그러나 개는 이미 a에 할당되어 있습니다. 그래서 우리는 두 개의 맵을 사용합니다. 하나는 -> 개로 매핑하고 다른 맵은 개 -> a로 매핑하여 개가 이미 다른 캐릭터와 매핑되고 있음을 알 수 있습니다.

코드를 시작합시다

class Solution {
    public boolean wordPattern(String pattern, String s) {
        String[] tokens = s.split(" ");
        
        if(pattern.length() != tokens.length) 
            return false;

        HashMap<String, Character> map = new HashMap<>();
        HashMap<Character, String> reverseMap = new HashMap<>();

        for(int i=0;i<tokens.length;i++) {
            String find = tokens[i];
            char pt = pattern.charAt(i);
            
            if(!map.containsKey(find))
                map.put(find, pt);
            if(!reverseMap.containsKey(pt))
                reverseMap.put(pt, find);

            char mapPt = map.get(find);
            String mapStr = reverseMap.get(pt);
            
            if(mapPt != pt)
                return false;
            if(!mapStr.equals(find))
                return false;
        }
        return true;
    }
}