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.
关键点:map
思路:
1) 将str通过“ ”拆分成字符串数组。
2) 遍历pattern所有字符,对每个字符(c)建立字典(map):
若当前字典中不存在该字符,则添加该字符与对应位置strs中的字符串的映射;
若当前字典中已存在该字符,则比较字典map中存放的value值与对应位置strs中的字符串是否相等,若不相等,则返回false。
3) 遍历中途没有退出,说明word match;反之,不匹配。
注意:不同字符在字典中对应的value值不能相等。
代码:
public boolean wordPattern(String pattern, String str) {
if(pattern == "" || str == "")
return false;
String[] strs = str.split(" ");
if(pattern.length() != strs.length)
return false;
Map<Character, String> map = new HashMap<Character, String>();
int i = 0;
for(i = 0;i < pattern.length(); i++)
{
char c = pattern.charAt(i);
if(!map.containsKey(c))
{
if(map.containsValue(strs[i]))
return false;
map.put(c, strs[i]);
}
else
{
String value = map.get(c);
if(!value.equals(strs[i]))
{
break;
}
}
}
return i == pattern.length()? true : false;
}