有点意思的题目。
以前第一次看没看懂,今天看懂了。
但是第一遍还是没能过。有个细节没想到。
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!