您的位置:首页 > 其它

leetcode_Word Pattern

2015-11-26 14:01 260 查看
描述:

Given a pattern and a string str, find if str follows the same pattern.

Here follow means a full match, such that there is a bijection between a letter in pattern and 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 pattern contains only lowercase letters, and str contains lowercase letters separated by a single space.

思路:

这一题和其中做过的一题很类似Isomorphic Strings,也是两个字符串str1,str2,这两个字符串中的字符是一一对应的,如str1中的字符'a'对应str2

中的字符’x',则str2中的'a'也对应于str1中的'x',这种对应关系是一一对应的,维护两个map对即可,或者两个长度为26的数组

来保存字符之间的对应关系,那么在本题中就要用到hashmap的对应关系了。

代码:

public boolean wordPattern(String pattern, String str) {
if(str==null)
return false;
int patternLen=pattern.length();
String strArr[]=str.trim().split("\\s+");
int strCount=strArr.length;
if(strCount!=patternLen)
return false;
Map<Character, String>map1=new HashMap<Character, String>();
Map<String, Character>map2=new HashMap<String, Character>();
char ch;
for(int i=0;i<patternLen;i++)
{
ch=pattern.charAt(i);
if(map1.containsKey(ch))
{
if(!strArr[i].equals(map1.get(ch)))
return false;
}else {
map1.put(ch, strArr[i]);
}
if(map2.containsKey(strArr[i]))
{
if(ch!=map2.get(strArr[i]))
return false;
}else {
map2.put(strArr[i], ch);
}
}
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: