[ LeetCode | Java ] 290. Word Pattern 📝

dokim·2023년 8월 31일
post-thumbnail

🏷️290. Word Pattern


1. 문제 설명

  • 주어진 패턴과 문자열 s가 주어졌을 때, s가 동일한 패턴을 따르는지 확인합니다.
  • 여기서 따르기란, 패턴의 문자와 s의 비어있지 않은 단어 사이에 일대일 대응이 있는 경우를 말합니다.


2. 접근 방법

  • Key : Value로 저장할 Map를 생성합니다.
  • 문자열 pattern, s을 배열로 만들어 비교하기 편하게 만듭니다.
  • 먼저 패턴의 개수가 다르면 오답이 되므로 문자열을 배열로 만든 pstr의 길이를 비교하여 다르면 false를 반환합니다.
  • 패턴의 길이만큼 반복문을 순회하며 조건문으로 패턴 알파벳 p가 map에 있는지 Key값으로 조회를 합니다.
  • 조회 데이터가 없다면 새로운 패턴 p : str 을 map에 Key : Value 값으로 저장합니다.
  • 이때 pattern = "abba", s = "dog dog dog dog" 와 같은 조합의 패턴이 올 경우 패턴 a와 b는 똑같은 패턴을 저장하게 되어 에러가 납니다. 에러를 방지하기 위해 데이터를 저장하기 전에 해당 Value가 있는지 확인하고 저장합니다. 만약 Value가 이미 존재한다면 false를 반환합니다
  • 조회 데이터가 있다면 해당 패턴 알파벳을 key값으로 Value를 조회하여 str값이 같은지 비교하여 다르면 false를 반환합니다.
  • 반복문이 무사히 끝나면 패턴이 같아 true를 반환합니다.

3. 구현 코드

class Solution {
    public boolean wordPattern(String pattern, String s) {
        
        Map<String, String> map = new HashMap<>();
        String[] p = pattern.split("");
        String[] str = s.split(" ");
        
        if(p.length != str.length)
            return false;
        
        for(int i = 0; i < p.length; i++){
            if(map.containsKey(p[i])){
                if(!map.get(p[i]).equals(str[i]))
                    return false;
            }
            else{
                if(!map.containsValue(str[i]))
                    map.put(p[i], str[i]);
                else
                    return false;
            }
        } 
        return true;
    }
}
  • 시간 복잡도: O(n)
  • 공간 복잡도: O(n)

4. 개선 사항


5. 최종 회고


6. 참고

0개의 댓글