[LeetCode] Word Pattern

아르당·4일 전

LeetCode

목록 보기
67/68
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

pattern과 문자열 s가 주어졌을 때, s가 동일한 패턴을 따르는지 판별해라.
여기서 follow는 패턴의 문자와 s에 있는 비어 있지 않은 단어 사이에 일대일 대응이 존재하는 완전한 일치를 의미한다.

  • 패턴의 각 글자는 s에 있는 하나의 고유한 단어에 정확히 대응한다.
  • s에 있는 각각의 고유한 단어는 패턴의 정확히 하나의 글자에 대응한다.
  • 어떤 두 글자도 같은 단어에 대응하지 않으며, 어떤 두 단어도 같은 글자에 대응하지 않는다.

Example

#1
Input: pattern = "abba", s = "dog cat cat dog"
Output: true
Explanation:
전단사 함수는 다음과 같이 설정할 수 있다.

  • 'a' maps to "dog".
  • 'b' maps to "cat".

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

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

Constraints

  • 1 <= pattern.length <= 300
  • pattern은 오직 영문 소문자만 포함한다.
  • 1 <= s.length <= 3000
  • s는 오직 영문 소문자와 공백 ' '만 포함한다.
  • s는 앞뒤에 공백이 없다.
  • s안의 모든 단어는 한 칸의 공백으로 구분된다.

Solved

class Solution {
    public boolean wordPattern(String pattern, String s) {
        String[] patterns = pattern.split("");
        String[] words = s.split(" ");

        if(patterns.length != words.length) return false;

        Map<String, String> seen = new HashMap<>();

        for(int i = 0; i < pattern.length(); i++){
          String p = patterns[i];
          String w = words[i];
          String keyP = "p_" + p;
          String keyW = "w_" + w;

          if(seen.containsKey(keyP) && !seen.get(keyP).equals(w)) return false;
          if(seen.containsKey(keyW) && !seen.get(keyW).equals(p)) return false;

          seen.put(keyP, w);
          seen.put(keyW, p);
        }

        return true;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글