【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;
    }
}    
相关推荐
lbb 小魔仙几秒前
【Linux】Ansible 自动化运维实战:2000+ 节点配置标准化教程
linux·运维·ansible
可爱又迷人的反派角色“yang”1 分钟前
k8s(三)
linux·运维·网络·docker·容器·kubernetes
脏脏a2 分钟前
【Linux】进程等待:wait/waitpid 与僵尸进程治理
linux·运维·服务器·wait·进程等待·waitpid
多米Domi0112 分钟前
0x3f 第24天 黑马web (安了半天程序 )hot100普通数组
数据结构·python·算法·leetcode
Swift社区3 分钟前
LeetCode 468 验证 IP 地址
tcp/ip·算法·leetcode
一叶之秋14122 小时前
Linux基础IO
linux·运维·服务器
黎雁·泠崖2 小时前
栈与队列实战通关:3道经典OJ题深度解析
c语言·数据结构·leetcode
longerxin20206 小时前
在 Linux 上使用 SCP 将文件传输到 Windows(已开启 SSH)
linux·运维·ssh
ytttr8738 小时前
隐马尔可夫模型(HMM)MATLAB实现范例
开发语言·算法·matlab
王正南9 小时前
kali-linux 虚拟机连接安卓模拟器
android·linux·运维·虚拟机连接模拟器·安卓模拟器,linux虚拟机