【Leetcode】Word Pattern
2016-06-09 21:06
302 查看
题目链接:https://leetcode.com/problems/word-pattern/
题目:
Given a
find if
Here follow means a full match, such that there is a bijection between a letter in
a non-empty word in
Examples:
pattern =
pattern =
pattern =
pattern =
Notes:
You may assume
lowercase letters separated by a single space.
思路:
1、pattern字符相等的位置对应的字符串中的单词应该是相等的,pattern字符不相等的位置对应的字符串中单词应该也是不相等的。时间复杂度为
O(n^2),空间复杂度为O(1)。
2、用HashMap存储字符到单词的映射关系,时间复杂度为O(n),空间复杂度为O(n)。
算法1:
[java] view
plain copy
public boolean wordPattern(String pattern, String str) {
String strs[] = str.split(" ");
char patterns[] = pattern.toCharArray();
if (strs.length != patterns.length || strs.length == 0) {
return false;
}
for (int i = 0; i < patterns.length; i++) {
for (int j = i + 1; j < patterns.length; j++) {
if (patterns[i] == patterns[j]) { // 字符相等的时候,单词应该相等
if (!strs[i].equals(strs[j])) {
return false;
}
} else { // 字符不相等的时候,单词也应该不相等
if (strs[i].equals(strs[j])) {
return false;
}
}
}
}
return true;
}
算法2:
[java] view
plain copy
public boolean wordPattern(String pattern, String str) {
String strs[] = str.split(" ");
char patterns[] = pattern.toCharArray();
HashMap<Character,String> map = new HashMap<Character,String>();
HashMap<String,Character> map2 = new HashMap<String,Character>();
if (strs.length != patterns.length || strs.length == 0) {
return false;
}
for (int i = 0; i < patterns.length; i++) {
if(!map.containsKey(patterns[i])){
map.put(patterns[i], strs[i]);
}else{
if(!map.get(patterns[i]).equals(strs[i])){
return false;
}
}
if(!map2.containsKey(strs[i])){
map2.put(strs[i], patterns[i]);
}else{
if(!map2.get(strs[i]).equals(patterns[i])){
return false;
}
}
}
return true;
}
题目:
Given a
patternand a string
str,
find if
strfollows the same pattern.
Here follow means a full match, such that there is a bijection between a letter in
patternand
a non-empty word in
str.
Examples:
pattern =
"abba", str =
"dog cat cat dog"should return true.
pattern =
"abba", str =
"dog cat cat fish"should return false.
pattern =
"aaaa", str =
"dog cat cat dog"should return false.
pattern =
"abba", str =
"dog dog dog dog"should return false.
Notes:
You may assume
patterncontains only lowercase letters, and
strcontains
lowercase letters separated by a single space.
思路:
1、pattern字符相等的位置对应的字符串中的单词应该是相等的,pattern字符不相等的位置对应的字符串中单词应该也是不相等的。时间复杂度为
O(n^2),空间复杂度为O(1)。
2、用HashMap存储字符到单词的映射关系,时间复杂度为O(n),空间复杂度为O(n)。
算法1:
[java] view
plain copy
public boolean wordPattern(String pattern, String str) {
String strs[] = str.split(" ");
char patterns[] = pattern.toCharArray();
if (strs.length != patterns.length || strs.length == 0) {
return false;
}
for (int i = 0; i < patterns.length; i++) {
for (int j = i + 1; j < patterns.length; j++) {
if (patterns[i] == patterns[j]) { // 字符相等的时候,单词应该相等
if (!strs[i].equals(strs[j])) {
return false;
}
} else { // 字符不相等的时候,单词也应该不相等
if (strs[i].equals(strs[j])) {
return false;
}
}
}
}
return true;
}
算法2:
[java] view
plain copy
public boolean wordPattern(String pattern, String str) {
String strs[] = str.split(" ");
char patterns[] = pattern.toCharArray();
HashMap<Character,String> map = new HashMap<Character,String>();
HashMap<String,Character> map2 = new HashMap<String,Character>();
if (strs.length != patterns.length || strs.length == 0) {
return false;
}
for (int i = 0; i < patterns.length; i++) {
if(!map.containsKey(patterns[i])){
map.put(patterns[i], strs[i]);
}else{
if(!map.get(patterns[i]).equals(strs[i])){
return false;
}
}
if(!map2.containsKey(strs[i])){
map2.put(strs[i], patterns[i]);
}else{
if(!map2.get(strs[i]).equals(patterns[i])){
return false;
}
}
}
return true;
}
相关文章推荐
- Python正则表达式
- C/C++杂记:虚函数的实现的基本原理
- 代码整洁之道(一)理论篇
- C# 数据类型
- emacs 安装ecb插件
- 《大数据精准挖掘》保险电销应用—寻找目标客户
- Android Adapter嵌套Adapter(文档类app,说明书类app)
- UVA 1025 A Spy in the Metro
- RedHat 7 配置本地yum源
- MJRefresh实现原理(详细版)
- java中文字符写入MySQL乱码问题
- 1009. 说反话 (20)
- 虚拟机安装RHEL 6.2
- 基本算法小结
- 对时间(Date)的计算方法
- 备战NOIP(其实并没有什么必然联系)
- linux 设备上没有空间
- 1007. 素数对猜想 (20)
- GIT问题,error:src refspec master does not match any
- 链表高级算法--1