您的位置:首页 > 其它

Word Pattern

2016-06-06 21:14 134 查看
这道题,必须得建立pattern和字符串间的一一对映关系,否则,pattern失效。这是第一次自己犯得错误。

第二次,自己用到了map的containValue方法,这个本身是好的,但需要在面试时讨论是否可行,如果不接受,还是定义一个set来确保一一对映。

public class Solution {
public boolean wordPattern(String pattern, String str) {
if (pattern == null || str == null) {
return false;
}
String[] strArray = str.split(" ");
if (pattern.length() != strArray.length) {
return false;
}
Map<String, Character> map = new HashMap<>();
Set<Character> set = new HashSet<>();
for (int i = 0; i < strArray.length; i++) {
if (!map.containsKey(strArray[i])) {
if (!set.contains(pattern.charAt(i))) {
map.put(strArray[i], pattern.charAt(i));
set.add(pattern.charAt(i));
} else
return false;
} else {
char patternChar = map.get(strArray[i]);
if (patternChar != pattern.charAt(i)) {
return false;
}
}
}

// right, but not good
// Map<String, Character> map = new HashMap<>();
// for (int i = 0; i < strArray.length; i++) {
// if (!map.containsKey(strArray[i])) {
// if (!map.containsValue(pattern.charAt(i)))
// map.put(strArray[i], pattern.charAt(i));
// else
// return false;
// } else {
// char patternChar = map.get(strArray[i]);
// if (patternChar != pattern.charAt(i)) {
// return false;
// }
// }
// }

// wrong
// Map<Character, String> map = new HashMap<>();
// for (int i = 0; i < strArray.length; i++) {
// if (!map.containsKey(pattern.charAt(i))) {
// map.put(pattern.charAt(i), strArray[i]);
// } else {
// String patternStr = map.get(pattern.charAt(i));
// if (!strArray[i].equals(patternStr)) {
// return false;
// }
// }
// }
return true;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: