290. Word Pattern

一、题目

  1、审题

  

  2、分析

    给出两个字符串,判断两个字符串的元素排列规则是不是一样。

 

二、解答

  1、思路

   方法一、

    采用 Map<Character, String>

    将 pattern 的字符作为 Key,str 切分成单词数组 arr,单词作为 Value。

    若 pattern中字符数与 str 单词数不相等,则返回 false;

    若相等,在依次在 Map 中进行判断。

    public boolean wordPattern(String pattern, String str) {
        String[] arr = str.split(" ");
        if(arr.length != pattern.length())
            return false;
        HashMap<Character, String> map = new HashMap<>();
        for (int i = 0; i < arr.length; i++) {
            char c = pattern.charAt(i);
            if(map.containsKey(c)) {
                if(!map.get(c).equals(arr[i]))
                    return false;
            }
            else {
                if(map.containsValue(arr[i]))
                    return false;
                map.put(c, arr[i]);
            }
        }
        return true;
    }
    

 

  方法二、

    采用 Map<Object, Integer>

    若 pattern 与 str 排列规则一样,则下标一样时, pattern 中的字符作为 key 下标作为 value, 与 str 中单词作为 key 下标作为 value 放入 Map 时,结果应当是一样的。

    若结果不一致,说明排列规则不一样。

    public boolean wordPattern2(String pattern, String str) {
        String[] words = str.split(" ");
        if(words.length != pattern.length())
            return false;
        HashMap<Object, Integer> map = new HashMap<>();
        for(Integer i = 0; i < words.length; i++)
            if(map.put(pattern.charAt(i), i) != map.put(words[i], i))
                return false;
        return true;
    }

 

posted @ 2018-11-25 10:39  skillking2  阅读(44)  评论(0编辑  收藏