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;
}
}
第二次,自己用到了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;
}
}
相关文章推荐
- Quartz以及代码实现--可以实现定时器效果
- 自定义特色组件
- 深入理解Redis中的主键失效及其实现机制
- 可伸缩堆(heap)的面向对象的C实现
- 程序集清单文件
- 二叉树的路径输出
- javac找不到或无法加载主类 com.sun.tools.javac.Main
- 项目管理工具:Maven使用方法总结
- 176. Second Highest Salary
- 自动轮播
- 依赖注入?Dagger?
- iOS中的触摸事件和手势处理
- js(javascript)中的奇特for循环写法!
- Android练手——分贝计
- asp.net控件汇总
- 跟我一起学C++之从C到C++(结构体内存对齐)
- 淘宝运营中的6大致命误区,你犯过么?
- Java 虚拟机总结 - JVM 内存区域
- 山东理工大学第八届ACM校赛——活动选择
- Bootstrap 栅格系统