首页 > 其他分享 >刷刷刷Day6|242.有效的字母异位词

刷刷刷Day6|242.有效的字母异位词

时间:2023-01-02 21:34:24浏览次数:61  
标签:字符 return HashMap Day6 异位 countMap int 242

242.有效的字母异位词

LeetCode题目要求

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true

解题思路
  • HashMap 记录字符出现次数解法,首先通过 HashMap 记录字符串 s 各个字符出现的次数,再遍历字符串 t 字符时,出现一个字符,就从 HashMap 减去一次,如果减去后的次数小于 0 或字符直接不存在,那么就说明不是异位词

上代码,HashMap 解法

class Solution {
    public boolean isAnagram(String s, String t) {
        // 若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词
        // 根据题目要求,可以通过对 s 中的字符计数,并与 t 的字符计数对比数量,如果各个字符数完全相等,
        // 那么认为是异位词

        if (s.length() != t.length()) {
            return false;
        }

        Map<Character, Integer> countMap = new HashMap<>();
        char[] ss = s.toCharArray();
        for (char c : ss) {
            if (countMap.containsKey(c)) {
                countMap.put(c, countMap.get(c) + 1);
            } else {
                countMap.put(c, 1);
            }
        }
        char[] ts = t.toCharArray();
        for (char c : ts) {
            if (countMap.containsKey(c)) {
                int count = countMap.get(c);
                if (count - 1 < 0) {
                    return false;
                } else {
                    countMap.put(c, count - 1);
                }
            } else {
                return false;
            }
        }
        return true;
    }
}
  • 数组解法,定义 26 长度的 int 数组,数组中首先记录的是从索引 0~26 的每个字符出现的次数,然后根据另一个字符串将出现的次数减去。如果最终数组元素值都等于 0 ,说明是异位词。相比使用 HashMap 来说节省了空间及操作时间

上代码

class Solution {
    public boolean isAnagram(String s, String t) {
        int[] counter = new int[26];
        // 遍历字符串 s, 记录字符出现的次数
        for (int i = 0; i < s.length(); i++) {
            counter[s.charAt(i) - 'a']++;
        }

        // 遍历字符串 t
        for (int i = 0; i < t.length(); i++) {
            counter[t.charAt(i) - 'a']--;
        }

        for (int i = 0; i < counter.length; i++) {
            if (counter[i] != 0) {
                return false;
            }
        }
        return true;
    }
}
重难点

附:学习资料链接

标签:字符,return,HashMap,Day6,异位,countMap,int,242
From: https://www.cnblogs.com/blacksonny/p/17020570.html

相关文章

  • Day6:结束基础语法学习
    运算符补充部分+,-,*,/packageoperator;publicclassDemo01{publicstaticvoidmain(String[]args){//二元运算符//Ctrl+D复制当前......
  • Atcoder Beginner Contest 242
    由于我8点半才下课,我只好晚半个小时再打,这次还行,排名3042五道题,秒了前三道,第四道不会,第五道想出正解,结果一直不对,比完后看了一下大佬的代码恍然大悟,但是比赛早已结束...........
  • 【SDOI2011】【BZOJ2242】计算器
    Description你被要求设计一个计算器完成以下三项任务:1、给定y、z、p,计算y^zmodp的值;2、给定y、z、p,计算满足xy≡z(modp)的最小非负整数;3、给定y、z......
  • 242.一个简单的整数问题
    传送门题目大意给定长度为\(N\)的数列\(A\),然后输入\(M\)行操作指令。第一类指令形如Clrd,表示把数列中第\(l\simr\)个数都加\(d\)。第二类指令形如Qx,......
  • 投资#242 如何注册ChatGPT,如何调教ChatGPT,如何用ChatGPT学习投资?​如何让ChatGPT成为
    OpenAI新上线的ChatGPT可谓是火出天际,互联网朋友圈都在传了,这个对话模型可以回答后续问题,承认错误,挑战不正确的前提,还能帮你修改代码中的bug……只......
  • day6-2022.12.17-flex布局初识(三)
    一、作业完成如下设计图的布局   二、作业需掌握知识点1、理解模型盒子1.1<imgsrc="../assets/boxModel.png"alt="" 解释:img标签用来引入图......
  • 力扣-49-字母异位词分组
    字母异位词就是:组成单词的字母相同,只是字母位置不同的单词没什么思路,朴素思路,先全部放到set里,然后不空就取一个出来,回溯构造所有的异位词和set中匹配public:vector<......
  • Day6 - 面向对象学习
    本节内容:面向对象编程介绍为什么要用面向对象进行开发?面向对象的特性:封装、继承、多态类、方法、 1.引子你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<......
  • 代码随想录训练营第六天|LeetCode242有效的字母异位词、LeetCode349两个数组的交集、L
    LeetCode242有效的字母异位词tag:#哈希表#数组leetcode地址:242. 有效的字母异位词代码://通过数组的方式对每个字母进行统计数量,然后遍历数组,查看是否每一项都为0f......
  • AtCoder Beginner Contest 242 F Black and White Rooks
    洛谷传送门AtCoder传送门不错的组合计数题。因为黑车和白车不能在同一行或者同一列,所以可以考虑枚举黑车有\(i\)行\(k\)列的位置放,白车有\(j\)行\(l\)列的位置......