LeetCode 290. 单词规律

65 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情

1.描述

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

给定一种规律 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 中每个单词都被 单个空格 分隔

2.分析

将字符串按照空格分割为单词数组
如果单词数组和匹配串的长度不一致,返回 false
用一个map来存储字符和单词之间的映射关系,以单词作为key,字符作为value
遍历单词数组和匹配串中的字符
如果映射中不存在当前字符串这个key,且不存在当前匹配串中对应的字符这个value,
则向map中添加映射,若不存在key但存在value,则返回false
如果映射中存在当前字符串这个key但是提取出的value和当前匹配串对应字符不一致,
则返回fasle
如果中间不出现意外,返回true即可

3.AC代码

class Solution {
    public boolean wordPattern(String pattern, String s) {
        Map<String, Character> map = new HashMap<>();
        String[] temp = s.split(" ");
        if(pattern.length() != temp.length)
            return false;
        for(int i = 0; i < temp.length; i++) {
            if(!map.containsKey(temp[i])){
                if(map.containsValue(pattern.charAt(i)))
                    return false;
                else
                    map.put(temp[i], pattern.charAt(i));
            }else if(pattern.charAt(i) != map.get(temp[i]))
                return false;
        }
        return true;
    }
}

参考

【哈希表】290.单词规律 - 单词规律 - 力扣(LeetCode)

js解题思路 清晰明了 - 单词规律 - 力扣(LeetCode)