春招打卡d14n24-leetcode刷题290单词规律

134 阅读1分钟

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

leetcode刷题290单词规律

前文

本题目为leetcode字符串处理类型题目,题目序号为290.主要考察对字符串处理的知识,题目链接https://leetcode-cn.com/problems/word-pattern/

题目信息

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

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

解题思路

本题目为字符串处理类型的题目。根据题目信息可知,与其说找字符串之间的规律,不如直接概括为寻找字符串之间的映射。这么说自然很容易会想到利用map完成该题目的解答。对于两个目标字符串,其中一个转化为数组,利用空格分割。而另一个直接利用字符串中每位元素进行映射即可。此时,我们相当于已经得到了两种数组。下一步需要做的是利用map进行映射,该映射比较容易忽视的是需要做成双向映射,即使用两个map数据结构。按此方式循环操作后,即可得到我们的目标答案,至此,题目解答完毕。

解题代码

public boolean wordPattern(String pattern, String s) {
    String[] strs = s.split(" ");
    if(pattern.length() != strs.length){
        return false;
    }
    HashMap<String,String> map = new HashMap<>();
    HashMap<String,String> mapReverse = new HashMap<>();
    for (int i = 0; i < strs.length; i++) {
        if(map.containsKey(String.valueOf(pattern.charAt(i)))){
            if(!map.get(String.valueOf(pattern.charAt(i))).equals(strs[i])){
                return false;
            }
        }else{
            map.put(String.valueOf(pattern.charAt(i)),strs[i]);
        }
        if(mapReverse.containsKey(strs[i])){
            if(!mapReverse.get(strs[i]).equals(String.valueOf(pattern.charAt(i)))){
                return false;
            }
        }else{
            mapReverse.put(strs[i],String.valueOf(pattern.charAt(i)));
        }
    }
    return true;
}

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。