290. 单词规律

2020-05-21  本文已影响0人  放下梧菲

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

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

示例1:

输入: pattern = "abba", str = "dog cat cat dog"
输出: true
示例 2:

输入:pattern = "abba", str = "dog cat cat fish"
输出: false
示例 3:

输入: pattern = "aaaa", str = "dog cat cat dog"
输出: false
示例 4:

输入: pattern = "abba", str = "dog dog dog dog"
输出: false
说明:
你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母。

本题其实不算什么难题,我也没用用什么巧妙的办法,就是建立两个哈希表,每次遍历到一个单词和一个字母,就建立双方的映射关系,当遍历到已经存在映射关系但是不相等的时候就是false,此外本题要注意,字母可能比字符串少,或者字符串比字母少,需要做额外判断。
代码如下:

class Solution {
    public boolean wordPattern(String pattern, String str) {
        
        HashMap <Character,String> map1 = new HashMap<>();
        HashMap <String,Character> map2 = new HashMap<>();
        int j = 0;
        for (int i = 0; i < pattern.length(); i++){
            char ch = pattern.charAt(i);
            int temp = j;
            while (j < str.length() && str.charAt(j) != ' ') j++;
            if (temp == j) return false;
            String s = str.substring(temp,j);
            if (map1.containsKey(ch)){
                if ( !s.equals(map1.get(ch))){
                    return false;
                }
            }
            if (map2.containsKey(s)){
                if ( ch != map2.get(s)){
                    return false;
                }
            }
            map1.put(ch,s);
            map2.put(s,ch);
            j++;
        }
        if (j >= str.length()) 
        return true;
        else 
        return false;


    }
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/word-pattern
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

上一篇下一篇

猜你喜欢

热点阅读