Use bidirectional hash maps to verify pattern-word bijection.
1class Solution {
2 public boolean wordPattern(String pattern, String s) {
3 String[] words = s.split(" ");
4
5 if (pattern.length() != words.length) return false;
6
7 Map<Character, String> charToWord = new HashMap<>();
8 Map<String, Character> wordToChar = new HashMap<>();
9
10 for (int i = 0; i < pattern.length(); i++) {
11 char c = pattern.charAt(i);
12 String word = words[i];
13
14 if (charToWord.containsKey(c)) {
15 if (!charToWord.get(c).equals(word)) return false;
16 } else {
17 charToWord.put(c, word);
18 }
19
20 if (wordToChar.containsKey(word)) {
21 if (wordToChar.get(word) != c) return false;
22 } else {
23 wordToChar.put(word, c);
24 }
25 }
26
27 return true;
28 }
29}