[LeetCode] NO. 290 Word Pattern

[题目] 

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:

  1. pattern = "abba", str = "dog cat cat dog" should return true.
  2. pattern = "abba", str = "dog cat cat fish" should return false.
  3. pattern = "aaaa", str = "dog cat cat dog" should return false.
  4. pattern = "abba", str = "dog dog dog dog" should return false.

[题目解析] 思路比较简单,pattern的字符和str划分后的单词是一一对应的关系的时候返回true,否则就为false,可以用map数据结构来实现。要注意的是,map中不同的key可以对应相同的value,需要注意下。

    public boolean wordPattern(String pattern, String str) {
        if(str.split(" ").length != pattern.length()) return false;
        Map<Character, String> map = new HashMap<Character,String>();
        Map<String, Boolean> valuemap = new HashMap<String,Boolean>();
        char p_arr[] = pattern.toCharArray();
        String str_arr[] = str.split(" ");
        int idx = 0;
        while(idx < p_arr.length){
            if(!map.containsKey(p_arr[idx])){
                if(valuemap.containsKey(str_arr[idx])){
                    return false;
                }
                map.put(p_arr[idx], str_arr[idx]);
                valuemap.put(str_arr[idx], true);
            }else if(!map.get(p_arr[idx]).equalsIgnoreCase(str_arr[idx])){
                return false;
            }
            idx++;
        }
        return true;
    }

 

posted @ 2016-11-02 15:15  三刀  阅读(454)  评论(0编辑  收藏  举报