290. Word Pattern
2 maps...和刚才做的一个很像。。
public class Solution {
public boolean wordPattern(String pattern, String str) {
String[] strings = str.split("\\s+");
if (strings.length != pattern.length()) return false;
Map<Character, String> map1 = new HashMap<Character, String>();
Map<String, Character> map2 = new HashMap<>();
for (int i = 0; i < strings.length; i++) {
char c = pattern.charAt(i);
String s = strings[i];
if (!map1.containsKey(c) && !map2.containsKey(s)) {
map1.put(c, s);
map2.put(s, c);
} else if (!map1.containsKey(c) || !map2.containsKey(s)) {
return false;
} else {
if (!map1.get(c).equals(s) || map2.get(s) != c) return false;
}
}
return true;
}
}
看到一个牛逼的做法。。。
public class Solution {
public boolean wordPattern(String pattern, String str) {
String[] strings = str.split("\\s+");
if (strings.length != pattern.length()) return false;
Map map = new HashMap<>();
for (Integer i = 0; i < strings.length; i++) {
if (map.put(strings[i], i) != map.put(pattern.charAt(i),i)) return false;
}
return true;
}
}
这里比较的似乎是Object,通过map.put()返还的Object, 所以for loop里是Integer而不是int。 好像是跟JAVA 常量池有关?
挺神奇的。。