【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;
    }
}    
相关推荐
Дерек的学习记录18 小时前
C++:入门基础(下)
开发语言·数据结构·c++·学习·算法·visualstudio
yugi98783819 小时前
无线传感器网络中GAF算法节点特性分析
网络·算法
1027lonikitave19 小时前
使用斐波那契数列讲解尾递归
算法
比奇堡派星星20 小时前
awk命令
linux·运维·服务器
清水白石00820 小时前
Python 柯里化完全指南:从函数式思想到工程实践
linux·服务器·python
滴滴答滴答答20 小时前
LeetCode Hot100 之 16 合并两个有序链表
算法·leetcode·链表
ASKED_201921 小时前
企业级大模型微调(Fine-tuning)策略
大数据·人工智能·算法
圣保罗的大教堂21 小时前
leetcode 3713. 最长的平衡子串 I 中等
leetcode
t1987512821 小时前
基于Chirp分解和多相快速算法的离散分数傅里叶变换(DFRFT)MATLAB实现
开发语言·算法·matlab
宸迪21 小时前
【python】使用uv管理项目包依赖
linux·python·uv