【LeetCode】290. 单词规律

这里写自定义目录标题

  • [2023-8-30 09:34:23](#2023-8-30 09:34:23)

290. 单词规律

2023-8-30 09:34:23

这道题目,我是根据 205. 同构字符串 的思路一样,都转化为另外一个第三方的字符串,在比较翻译过后的语句是不是一样的。

java 复制代码
class Solution {
    public boolean wordPattern(String pattern, String s) {
        String[] s1 = s.split(" ");
        return helper1(pattern).equals(helper2(s1));
    }

    private String helper1(String str){
        int[] temp = new int[26];
        StringBuilder result = new StringBuilder();
        for(int i = 0; i < str.length(); i++){
            int c = str.charAt(i) - 'a';
            if(temp[c] == 0){
                temp[c] = i + 1;
            }
            result.append(temp[c]);
        }
        return result.toString();
    }

    private String helper2( String[] s1){
        Map<String, Integer> map =  new HashMap<String, Integer>();
        StringBuilder result = new StringBuilder();
        for(int i = 0 ; i < s1.length; i++){
            if(!map.containsKey(s1[i])){
                map.put(s1[i], i +1);
            }
            result.append(map.get(s1[i]));
        }
        return result.toString();
    }
}

看看官方的解法:

java 复制代码
class Solution {
    // public boolean isIsomorphic(String s, String t) {
    //     return isIsomorphicHelper(s).equals(isIsomorphicHelper(t));
    // }

    public boolean wordPattern(String pattern, String str) {
        String[] words = str.split(" ");
        //字符和单词是互相映射,数量必须相等
        if (words.length != pattern.length()) {
            return false;
        }
        Map<Object, Integer> map = new HashMap<>();
        for (Integer i = 0; i < words.length; i++) {
            /*
                如果key不存在,插入成功,返回null;如果key存在,返回之前对应的value。

                以pattern = "abba", str = "dog cat cat dog"为例,
                第1次:map.put('a',0)返回null,map.put("dog",0)返回null,两者相等;
                第2次:map.put('b',1)返回null,map.put("cat",1)返回null,两者相等;
                第3次:map.put('b',2)返回1,map.put("cat",2)返回1,两者相等;
                第4次:map.put('a',3)返回0,map.put("dog",3)返回0,两者相等,
                结果为 true。

                以pattern = "abba", str = "dog cat cat fish"为例,
                第1次:map.put('a',0)返回null,map.put("dog",0)返回null,两者相等;
                第2次:map.put('b',1)返回null,map.put("cat",1)返回null,两者相等;
                第3次:map.put('b',2)返回1,map.put("cat",2)返回1,两者相等;
                第4次:map.put('a',3)返回0,map.put("fish",3)返回null,两者不相等,
                结果为 false。
            */

            /*
             * 为什么 Integer 在这里用的是 != 进行判断 ?
             * 1. 会返回null值,如果用equals进行判断,会产生空指针异常
             * 2. 理想状态的就是 Integer 的值在 0 - 25 之间进行判断,这一部分也是程序上需要返回true的情况
             */
            if (map.put(pattern.charAt(i), i) != map.put(words[i], i)) {
                return false;
            }
        }
        return true;
    }
}    
相关推荐
Jerry1 小时前
LeetCode 101. 对称二叉树
算法
探索云原生2 小时前
终于搞懂 Kueue:5 个核心对象一次讲透
linux·docker·ai·云原生·kubernetes
可编程芯片开发2 小时前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
An_s2 小时前
机器学习python之识别图中物品信息
java·linux·开发语言
AI科技星2 小时前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
米罗篮2 小时前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
dream_home84073 小时前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
Championship.23.243 小时前
Linux 3.0 LVDS驱动开发详解
linux·运维·驱动开发·lvds
大鱼>3 小时前
多宠物家庭智能管理平台:云端架构与多设备协同实战
python·算法·iot·宠物
风向决定发型丶4 小时前
Shell中的特殊变量
linux·运维·bash