有點意思的題目。
以前第一次看沒看懂,今天看懂了。
但是第一遍還是沒能過。有個細節沒想到。
My code:
import java.util.HashMap;
import java.util.HashSet;
public class Solution {
public boolean wordPattern(String pattern, String str) {
String[] pa = str.split(" ");
if (pattern.length() != pa.length)
return false;
HashMap<Character, String> vec = new HashMap<Character, String>();
HashSet<String> h = new HashSet<String>();
for (int i = 0; i < pattern.length(); i++) {
char tmp = pattern.charAt(i);
if (vec.containsKey(tmp)) {
String val = vec.get(tmp);
if (!val.equals(pa[i]))
return false;
}
else {
if (h.contains(pa[i]))
return false;
vec.put(tmp, pa[i]);
h.add(pa[i]);
}
}
return true;
}
}
細節在于這里:
a b b a
dog dog dog dog
這是false的
那么,每次給hash map 插入新的元素的時候就需要判斷下,這個key對應的value是否已經存在過了,即,其他key是不是也擁有這個val。
那么就用一個hash set來存放所有的val。
如果發現contains,即重復了,那么就判斷為false
使用hash set, 因為hash set 的特性是,里面的元素只出現一次,不重復。這是天哥教我的。
**
總結:
細節要注意。
**
Anyway, Good luck, Richardo!