领扣(LeetCode)单词模式 个人题解
给定一种 pattern(模式)
和一个字符串 str
,判断 str
是否遵循相同的模式。
这里的遵循指完全匹配,例如, pattern
里的每个字母和字符串 str
中的每个非空单词之间存在着双向连接的对应模式。
示例1:
输入: pattern ="abba"
, str ="dog cat cat dog"
输出: true
示例 2:
输入:pattern ="abba"
, str ="dog cat cat fish"
输出: false
示例 3:
输入: pattern ="aaaa"
, str ="dog cat cat dog"
输出: false
示例 4:
输入: pattern ="abba"
, str ="dog dog dog dog"
输出: false
说明:
你可以假设 pattern
只包含小写字母, str
包含了由单个空格分隔的小写字母。
这题比较简单。使用hashmap可以较为快捷解决问题。特别的,在这题里需要注意value不唯一对应key的问题,比如“aabb”,“dog dog dog dog”案例中,dog对应了a和b。根据题意是要返回错误的。所以需要加上判断。
代码如下:
1 class Solution { 2 public boolean wordPattern(String pattern, String str) { 3 boolean ans = true; 4 String[] ss = str.split(" "); 5 Map<Character, String> map = new HashMap<>(); 6 if (ss.length != pattern.length()) 7 return false; 8 for (int i = 0; i < pattern.length(); i++) { 9 if (map.get(pattern.charAt(i)) == null) { 10 if (!map.containsValue(ss[i])) { 11 map.put(pattern.charAt(i), ss[i]); 12 continue; 13 } else 14 return false; 15 } 16 if (!map.get(pattern.charAt(i)).equals(ss[i])) { 17 ans = false; 18 break; 19 } 20 } 21 return ans; 22 } 23 }