Given a pattern
and a string str
, find if str
follows the same pattern.
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:
pattern
contains only lowercase alphabetical letters, andstr
contains words separated by a single space. Each word instr
contains only lowercase alphabetical letters.- Both
pattern
andstr
do not have leading or trailing spaces. - Each letter in
pattern
must map to a word with length that is at least 1.
straight forward, use hashtable to store current map from pattern character to str string. If there exits and not match or string maps more than one letter return false.
public boolean wordPattern(String pattern, String str) {
String[] strs = str.split(" ");
if(pattern.length() != strs.length) return false;
Map<Character, String> map = new HashMap<Character, String>();
for(int i=0;i<pattern.length();i++) {
if(!map.containsKey(pattern.charAt(i))) {
if(map.containsValue(strs[i])) return false;
map.put(pattern.charAt(i), strs[i]);
}else {
if(strs[i].equals(map.get(pattern.charAt(i)))) continue;
else return false;
}
}
return true;
}