day22(12.2)——leetcode面试经典150

290. 单词规律

290. 单词规律

题目:

题解:

java 复制代码
class Solution {
    public boolean wordPattern(String pattern, String s) {
        //得到每个单词
        List<String> ss = Arrays.asList(s.split(" "));
        Map<Character,String> map1 = new HashMap<>();
        Map<String,Character> map2 = new HashMap<>();
        if(ss.size() != pattern.length()) {
            return false;
        }
        for(int i=0;i<pattern.length();i++) {
            Character c = pattern.charAt(i);
            //将pattern作为key
            //如果在map1中包含c
            if(map1.containsKey(c)) {
                //如果对应的字符串不是当前的字符串,直接返回false
                if(!map1.get(c).equals(ss.get(i))) {
                    return false;
                }
            } 
            //如果不包含,进行映射
            else {
                map1.put(c,ss.get(i));
            }

            //将s作为key
            //如果在map2中包含c
            if(map2.containsKey(ss.get(i))) {
                //如果对应的字符串不是当前的字符串,直接返回false
                if(!map2.get(ss.get(i)).equals(c)) {
                    return false;
                }
            } 
            //如果不包含,进行映射
            else {
                map2.put(ss.get(i),c);
            }
        }
        return true;
    }
}

242. 有效的字母异位词

242. 有效的字母异位词

题目:

题解一:

java 复制代码
class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length()!=t.length()) {
            return false;
        }
        //分别用来统计s和t的字符串
        Map<Character,Integer> map1 = new HashMap<>();
        Map<Character,Integer> map2 = new HashMap<>();
        for(int i=0;i<s.length();i++) {
            Character ss = s.charAt(i);
            Character tt = t.charAt(i);
            map1.put(ss, map1.getOrDefault(ss, 0)+1);
            map2.put(tt, map2.getOrDefault(tt, 0)+1); 
        }
        if(map1.equals(map2)) {
            return true;
        }
        return false;
    }
}

题解二:

java 复制代码
class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length()!=t.length()) {
            return false;
        }
        char[] c1 = s.toCharArray();
        char[] c2 = t.toCharArray();
        //进行排序
        Arrays.sort(c1);
        Arrays.sort(c2);
        String s1 = new String(c1);
        String s2 = new String(c2);
        //转换成字符串,进行判断是否相等
        if(s1.equals(s2)) {
            return true;
        }
        return false;
    }
}

在写题解2的时候我一开始是想着直接让c1和c2比较,但是我发现报错,于是就换成转成字符串进行比较,然后完成该题之后就问了ai为什么不行,原因竟然是因为List的==比较还是equals来比较,都比较的是内存地址,就相当于都是==来比较。所以,如果我非要比较c1和c2,就必须用Arrays.equals(c1,c2)来比较。过程如下

java 复制代码
class Solution {
    public boolean isAnagram(String s, String t) {
        if(s.length()!=t.length()) {
            return false;
        }
        char[] c1 = s.toCharArray();
        char[] c2 = t.toCharArray();
        //进行排序
        Arrays.sort(c1);
        Arrays.sort(c2);
        // String s1 = new String(c1);
        // String s2 = new String(c2);
        //转换成字符串,进行判断是否相等
        // if(s1.equals(s2)) {
        //     return true;
        // }
        // return false;
        if(Arrays.equals(c1,c2)) {
            return true;
        }
        return false;
    }
}
相关推荐
发现一只大呆瓜12 分钟前
虚拟列表:支持“向上加载”的历史消息(Vue 3 & React 双版本)
前端·javascript·面试
千寻girling1 小时前
Koa.js 教程 | 一份不可多得的 Node.js 的 Web 框架 Koa.js 教程
前端·后端·面试
程序员清风1 小时前
北京回长沙了,简单谈谈感受!
java·后端·面试
网络安全-杰克2 小时前
2026面试自动化测试面试题【含答案】
自动化测试·软件测试·面试·职场和发展
千寻girling5 小时前
主管:”人家 Node 框架都用 Nest.js 了 , 你怎么还在用 Express ?“
前端·后端·面试
xiaoxue..6 小时前
合并两个升序链表 与 合并k个升序链表
java·javascript·数据结构·链表·面试
猿小羽8 小时前
AIGC 应用工程师(3-5 年)面试题精讲:从基础到实战的系统备战清单
面试·大模型·aigc·agent·rag
boooooooom9 小时前
Pinia必学4大核心API:$patch/$reset/$subscribe/$onAction,用法封神!
javascript·vue.js·面试
试着9 小时前
【huawei】机考整理
学习·华为·面试·机试
石去皿9 小时前
【嵌入式就业6】计算机组成原理与操作系统核心机制:夯实底层基础
c++·面试·嵌入式