【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;
    }
}    
相关推荐
vip45111 分钟前
Linux 经典面试八股文
linux
大霞上仙13 分钟前
Ubuntu系统电脑没有WiFi适配器
linux·运维·电脑
为什么这亚子1 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
1 小时前
开源竞争-数据驱动成长-11/05-大专生的思考
人工智能·笔记·学习·算法·机器学习
~yY…s<#>1 小时前
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
c语言·数据结构·c++·算法·leetcode
孤客网络科技工作室1 小时前
VMware 虚拟机使用教程及 Kali Linux 安装指南
linux·虚拟机·kali linux
幸运超级加倍~2 小时前
软件设计师-上午题-16 算法(4-5分)
笔记·算法
颇有几分姿色2 小时前
深入理解 Linux 内存管理:free 命令详解
linux·运维·服务器
yannan201903132 小时前
【算法】(Python)动态规划
python·算法·动态规划
埃菲尔铁塔_CV算法2 小时前
人工智能图像算法:开启视觉新时代的钥匙
人工智能·算法