leetcode290. 单词规律

leetcode290. 单词规律

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

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

示例1:

输入: pattern = “abba”, str = “dog cat cat dog”
输出: true

代码一:单映射

class Solution {
    public boolean wordPattern(String pattern, String s) {
        Map<String, Character> map = new HashMap<>();
        List<String> list = new ArrayList<>();
        char[] charp = pattern.toCharArray();
 		//将string字符串一空格拆分开     
        String[] string=s.split(" ");
        //如果两边的长度不相等,返回false
        if(string.length!=pattern.length()) return false;

        for (int i = 0; i < string.length; i++) {
            if (map.containsKey(string[i])) {
            //如果已经存在这个key了,但是这个key的值映射的不是对应的pattern,不符合题意,返回false
                if (map.get(string[i]) != charp[i])
                    return false;
            } else {
            //如果没有这个值,就将这个值加入
                map.put(string[i], charp[i]);
            }
        }
		//不同的值不能映射同一个pattern,所以如果有一个值出现两次的话,那么他就一定不可以
        int[] seen = new int[26];
        for (char c : map.values()) {
            if (seen[c - 'a'] == 1)
                return false;
            seen[c - 'a'] = 1;
        }
        return true;
    }
}

代码二:双映射

class Solution {
    public boolean wordPattern(String pattern, String s) {
        Map<String, Character> map1 = new HashMap<>();
        Map<Character,String>  map2=new HashMap<>();
        char[] charp = pattern.toCharArray();
        String[] string=s.split(" ");

        if(string.length!=pattern.length()) return false;

        for (int i = 0; i < string.length; i++) {
            if (!map1.containsKey(string[i])) 
                map1.put(string[i],charp[i]);
            if(!map2.containsKey(charp[i]))
                map2.put(charp[i],string[i]);
                //从string向patter映射和从pattern向string映射双边映射的值应该是对应的,如果不对应那么就是出错了。
            if(map1.get(string[i])!=charp[i]||!map2.get(charp[i]).equals(string[i]))
                return false;
        }
        
        return true;
    }
}

你可能感兴趣的:(leetcode,leetcode,字符串,java)