71.单词规律

给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。

这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。

/*
解题思路
先将规律pattern和字符串s分割开来,字符串s可以直接调用String里的split方法,然后用一个Hash表
分别pattern中的一个Character作为key,字符数组中的一个单词作为value,最后遍历一遍,边遍历边判断
当前映射是否已经存在或错误映射(两种情况:1、key值已存在但value不同 2、value已存在但key值不同),全遍历完没问题就返回true,否则遍历中间就会返回false。
*/
class Solution {
    public boolean wordPattern(String pattern, String s) {

        HashMap <Character,String> mp = new HashMap<>();

        char[] pattern_chars=pattern.toCharArray();

        String[] ss = s.split(" ");  //按空格分割字符串
        
        if(pattern_chars.length!=ss.length)return false;//长度都不对应直接false

        int i=0;

        for(char a : pattern_chars){
            if(!mp.containsKey(a)){
                if(!mp.containsValue(ss[i])){  //对应value已存在但key值不同
                    mp.put(a,ss[i++]);
                }
                else return false;
            }
            else {//对应key值已存在但value不同,注意比较要用equals,用!=结果不对
                if(!Objects.equals(mp.get(a), ss[i++])) return false;
            }
        }
        return true;
    }
}

 

posted @ 2022-03-19 15:10  随遇而安==  阅读(28)  评论(0编辑  收藏  举报