[LeetCode] NO. 290 Word Pattern
[题目]
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.
[题目解析] 思路比较简单,pattern的字符和str划分后的单词是一一对应的关系的时候返回true,否则就为false,可以用map数据结构来实现。要注意的是,map中不同的key可以对应相同的value,需要注意下。
public boolean wordPattern(String pattern, String str) { if(str.split(" ").length != pattern.length()) return false; Map<Character, String> map = new HashMap<Character,String>(); Map<String, Boolean> valuemap = new HashMap<String,Boolean>(); char p_arr[] = pattern.toCharArray(); String str_arr[] = str.split(" "); int idx = 0; while(idx < p_arr.length){ if(!map.containsKey(p_arr[idx])){ if(valuemap.containsKey(str_arr[idx])){ return false; } map.put(p_arr[idx], str_arr[idx]); valuemap.put(str_arr[idx], true); }else if(!map.get(p_arr[idx]).equalsIgnoreCase(str_arr[idx])){ return false; } idx++; } return true; }