Problem
pattern
과 str
이 주어질 때 두 문자열의 패턴이 일치해야 합니다.
예시로 abba
가 주어지면 str
은 아래의 규칙을 가지면 됩니다.
- 네 개의 단어로 이루어진다
- 맨 앞과 맨 끝의 단어가 똑같다 (a)
- 가운데의 두 단어가 똑같다 (b)
Solution
String[] words = str.split(" ")
코드로 문자들을 나누고 시작합니다.
pattern
의 길이와 words
배열의 길이는 같아야 합니다.
각 패턴 c
와 각 문자열 word
를 키값으로 하는 HashMap
을 각각 선언하여 담아둡니다.
만약 c
키값이 존재하는데 map
에 있는 map.get(c)
와 현재 위치의 word
가 일치하지 않는다면 패턴 불일치입니다.
pattern = "abba", str = "dog dog dog dog"
으로 주어지는 케이스가 있기 때문에 word
를 키값으로 한 HashMap
에서도 한번 더 검사해줍니다.
Java Code
class Solution {
public boolean wordPattern(String pattern, String str) {
Map<Character, String> charMap = new HashMap<>();
Map<String, Character> strMap = new HashMap<>();
String[] words = str.split(" ");
if (pattern.length() != words.length) return false;
for (int i=0; i<words.length; i++) {
char c = pattern.charAt(i);
String word = words[i];
if (charMap.containsKey(c) && !charMap.get(c).equals(word)) {
return false;
}
if (strMap.containsKey(word) && strMap.get(word) != c) {
return false;
}
charMap.put(c, word);
strMap.put(word, c);
}
return true;
}
}
'알고리즘 문제 > LeetCode' 카테고리의 다른 글
[LeetCode Easy] Middle of the Linked List (Java) (0) | 2020.04.09 |
---|---|
[LeetCode] Counting Elements (Java) (0) | 2020.04.09 |
[LeetCode Medium] Coin Change 2 (Java) (0) | 2020.04.09 |
[LeetCode Easy] Best Time to Buy and Sell Stock II (Java, Kotlin) (0) | 2020.04.05 |
[LeetCode Easy] Move Zeroes (Java) (0) | 2020.04.04 |