【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;
    }
}    
相关推荐
.小小陈.19 分钟前
Linux 线程概念与控制:从底层原理到实战应用
linux·运维·jvm
网络工程小王25 分钟前
【LangChain 大模型6大调用指南】调用大模型篇
linux·运维·服务器·人工智能·学习
wangbing112530 分钟前
各linux版本的包管理命令
linux·运维·服务器
Joseph Cooper1 小时前
Linux/Android 跟踪技术:ftrace、TRACE_EVENT、atrace、systrace 与 perfetto 入门
android·linux·运维
MediaTea1 小时前
AI 术语通俗词典:C4.5 算法
人工智能·算法
Navigator_Z1 小时前
LeetCode //C - 1033. Moving Stones Until Consecutive
c语言·算法·leetcode
WBluuue1 小时前
数据结构与算法:莫队(一):普通莫队与带修莫队
c++·算法
风筝在晴天搁浅2 小时前
n个六面的骰子,扔一次之后和为k的概率是多少?
算法
比昨天多敲两行2 小时前
Linux基础开发工具(下)
linux·运维·服务器
MATLAB代码顾问3 小时前
Python实现蜂群算法优化TSP问题
开发语言·python·算法