Java [Leetcode 290]Word Pattern

1858 ワード

タイトルの説明:
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.

  •  
    Notes:You may assume  pattern  contains only lowercase letters, and  str  contains lowercase letters separated by a single space.
    問題解決の考え方:
    HashMapを使って作ります.
    コードは次のとおりです.
    public class Solution {
        public boolean wordPattern(String pattern, String str) {
        	if(pattern == null || str == null)
        		return false; 
            String[] words = str.split(" ");
            if(pattern.length() != words.length)
            	return false;
            Map<Character, String> map = new HashMap<Character, String>();
            for(int i = 0; i < pattern.length(); i++){
            	char t = pattern.charAt(i);
            	if(map.containsKey(t)){
            		if(!words[i].equals(map.get(t)))
            			return false;
            	} else {
            		if(map.containsValue(words[i]))
            			return false;
            		map.put(t, words[i]);
            	}
            }
            return true;
        }
    }