156.Word Pattern

题目:

Given a pattern and a string str, find if str follows the same pattern.

给定一个模式和一个字符串str,找到str是否遵循相同的模式。

Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str.

以下是完全匹配,这样在模式中的字母和str中的非空字之间存在双射。

Example 1:

Input: pattern = "abba", str = "dog cat cat dog"
Output: true

Example 2:

Input:pattern = "abba", str = "dog cat cat fish"
Output: false

Example 3:

Input: pattern = "aaaa", str = "dog cat cat dog"
Output: false

Example 4:

Input: pattern = "abba", str = "dog dog dog dog"
Output: false

Notes:
You may assume pattern contains only lowercase letters, and str contains lowercase letters separated by a single space.

您可以假设pattern仅包含小写字母,str包含由单个空格分隔的小写字母。

解答:

方法一:建立字母和单词的映射(a->dog)

 1 class Solution {
 2     public boolean wordPattern(String pattern, String str) {        
 3         String[] words=str.split(" ");
 4         if(words.length!=pattern.length())
 5             return false;
 6         Map<Character,String> map=new HashMap<>();
 7         for(int i=0;i<pattern.length();i++){
 8             char c=pattern.charAt(i);
 9             if(map.containsKey(c)){
10                 if(!map.get(c).equals(words[i])) //这里不能用!=,!=比较的是地址,equals比较的是值
11                     return false;
12             }else{
13                 if(map.containsValue(words[i]))  //保证一一映射,值只能对应一个键,不能出现a->dog,b->dog的现象
14                     return false;
15                 map.put(c,words[i]);
16             }
17         }
18         return true;
19     }
20 }

方法二:分别建立字母和位置的映射,单词和位置的映射

 1 class Solution {
 2     public boolean wordPattern(String pattern, String str) {        
 3         String[] words = str.split(" ");
 4         if (words.length != pattern.length())
 5             return false;
 6         Map map = new HashMap();
 7         for (Integer i=0; i<words.length; i++)
 8             if (map.put(pattern.charAt(i), i) != map.put(words[i], i))
 9                 return false;
10         return true;
11     }
12 }

详解:

哈希表--映射

posted @ 2018-09-11 16:50  chan_ai_chao  阅读(115)  评论(0编辑  收藏  举报