美文网首页
290. 单词规律

290. 单词规律

作者: 放下梧菲 | 来源:发表于2020-05-21 09:41 被阅读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
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:290. 单词规律

          本文链接:https://www.haomeiwen.com/subject/nbgaohtx.html