领扣(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 }

 

posted @ 2018-11-09 21:03  AXiangCoding  阅读(245)  评论(0编辑  收藏  举报