290. 单词规律 [春招刷题]

95 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

290. 单词规律 - 力扣(LeetCode) (leetcode-cn.com)

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

这里的 遵循 指完全匹配,例如, 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

提示:

  • 1 <= pattern.length <= 300
  • pattern 只包含小写英文字母
  • 1 <= s.length <= 3000
  • s 只包含小写英文字母和 ' '
  • s 不包含 任何前导或尾随对空格
  • s 中每个单词都被 单个空格 分隔

二、思路分析:

这一题最容易想到也是最容易实现的就是通过集合的方式,以一个主键对应一个值类似映射,针对主键如果不存在,则添加进入集合,如果存在,则相同主键对应的值必然相同,否则返回false,值得一提的是,本题在主键不相同的情况下需要判断不同主键对应的值比不可能相同,这一点不能漏掉。

三、AC 代码:

class Solution {
    public boolean wordPattern(String pattern, String str) {
         if(pattern==null || str==null) {
            return false;
        }
        String[] arr = str.split(" ");
        if(pattern.length()!=arr.length) {
            return false;
        }
        
        Map<Character,String> map = new HashMap<Character,String>();
        for(int i = 0;i<pattern.length();i++) {
            char tmp = pattern.charAt(i);
            if(map.containsKey(tmp)) {
                if(!map.get(tmp).equals(arr[i])) {
                    return false;
                }

            }else {
                if(map.containsValue(arr[i])) {
                    return false;
                }
                map.put(tmp,arr[i]);
            }
        }
        return true;
    }
}

四、总结:

主要还是一个哈希表的应用。