首页 > 编程语言 >LeetCode 242 有效的字母异位词(JAVA)

LeetCode 242 有效的字母异位词(JAVA)

时间:2024-03-19 15:22:55浏览次数:22  
标签:字符 JAVA String int 异位 字母 length 242 LeetCode

LeetCode 242 有效的字母异位词(JAVA)

一、题目描述:

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例 1:

输入: s = "anagram", t = "nagaram"
输出: true
示例 2:

输入: s = "rat", t = "car"
输出: false
 

提示:

1 <= s.length, t.length <= 5 * 104
s 和 t 仅包含小写字母
 

二、题目分析:

该问题针对的是数组对象。由于题目已经明确只包含小写字母,则无需考虑其他字符的情况。
字母异位词的含义为两个字符串的字符出现次数相同,则互为字母异位词。如'anagram'与'nagaram'.
这里我考虑采用map,通过键值对的形式记录下字符串中的字符与出现次数,然后在比较两个map是否一致。

三、开始作答:

class Solution {
    public boolean isAnagram(String s, String t) {

        Map<Character,Integer> mapA = new HashMap<>();
        Map<Character,Integer> mapB = new HashMap<>();
		//计算s的字符和次数
        for(int i = 0; i< s.length();i++){
            mapA.put(s.charAt(i),mapA.getOrDefault(s.charAt(i),0) + 1);
        }
		//计算t的字符和次数
        for(int i = 0; i< t.length();i++){
            mapB.put(t.charAt(i),mapB.getOrDefault(t.charAt(i),0) + 1);
        }
		//判断是否相等
        if(mapA.equals(mapB)){
            return true;
        }else{
            return false;
        }

    }
}

四、查看题解:

看完题解后,发现自己有点呆,直接通过数组就能完成。同时也忽略了一些特判。

1.首先判断两个字符串数组是否相等,如果不相等那必然不是字母异位词。
2.初始化字母哈希表,遍历s和t.这一步申请的空间根据字母表大小申请,控制数组大小。
3.s在对应的位置增加,t在对应的位置减少,最后哈希表每个值都为0,则说明是字母异位词。
class Solution {
    public boolean isAnagram(String s, String t) {
        //特判
        if(s.length() != t.length()){
            return false;
        }
        //初始化哈希表
        int[] hash = new int[26];

        for(int i = 0; i<s.length();i++){
            //遍历s字符串,在对应位置计数
            hash[s.charAt(i) - 'a'] ++;
            //遍历t字符串,在对应位置减去计数
            hash[t.charAt(i) - 'a'] --;
        }

        //最后判断hash表的每一个值是否都为0,如果为0则为字母异位词
        for(int i = 0; i< 26; i++){
            if(hash[i] != 0){
                return false;
            }

        }
        return true;
    }
}

这个是优化后的版本。

标签:字符,JAVA,String,int,异位,字母,length,242,LeetCode
From: https://www.cnblogs.com/jshmztl/p/18083024

相关文章

  • java核心技术卷1 第六章:接口、lambda表达式与内部类
    接口接口不是类,而是描述了符合这个接口的类应该做什么,描述了一组抽象的需求,而没有指定怎么做接口中的所有方法自动是public,接口中声明方法不需要加public(java规范,减少不必要的冗余声明,即使一些程序员为了清晰习惯加上public)实现接口时,需要加上public,不然默认将权限设为了defa......
  • 算法训练营第10天|栈与队列基础知识总结 LeetCode 232.用栈实现队列 225.用队列实现栈
    栈与队列基础知识总结 首先要明白栈和队列不同的地方在于,栈是先入后出的结构,队列是先入先出的结构。栈的基本操作栈的定义: stack<int>s;入栈元素:intx;s.push(x);出栈元素:s.pop();返回栈顶元素:s.top();判断栈是否为空:s.empty();队列的基本操作:队列和栈的基本......
  • 身份证文字识别ocr免费-身份证实名认证接口-护照识别-Java调用代码
    文字识别技术是针对图片上的文字进行提取,免去人们手动输入的繁琐。针对证件,翔云提供了身份证识别接口、身份证实名认证接口、护照识别接口,身份证识别接口自动提取身份证信息、身份证实名认证接口实时联网查验身份证的真伪。以身份证识别接口Java语言代码为例,欢迎免费体验:pac......
  • JAVA接口代码-从技术到创新、发票ocr、发票查验接口、发票识别
    财政类票据ocr、增值税发票识别、全电票ocr接口是一项重要的技术创新,在数字化、信息化高速发展的商业环境中发挥着至关重要的作用。通过集成翔云API,可快速实现发票信息的自动化识别提取与真伪查验,提升了财务管理效率。就发票识别接口,提供Java语言代码,有需要的人员可在线......
  • 基于Java+Vue的人力资源管理系统设计与实现【附源码+文档】
        前言:eHR人力资源管理系统是一个综合性的、用于优化人力资源管理流程的系统。它涵盖了人力资源管理的多个方面,包括招聘、人事、考勤、绩效、社保公积金以及薪酬管理等。以下是关于这些模块的详细解释:一、招聘管理招聘管理是eHR系统的重要组成部分,它可以帮助企业实现......
  • java GC Collector
    java垃圾收集器#最小堆值,不设置默认为操作系统1/64-Xms4G#最大堆值,不设置默认为操作系统1/4-Xmx4GG1jdk9开始默认启用,显示启用-XX:+UseG1GC介绍服务器级计算机上的垃圾优先(G1)收集器,否则为串行收集器。GC线程的最大数量受堆大小和可用CPU资源的限制初始堆......
  • Centos安装配置Java8
    查看Centos发行版本[root@lavm-ik3g4r3pga~]#cat/etc/redhat-releaseCentOSLinuxrelease7.9.2009(Core)查看java8安装包[root@lavm-ik3g4r3pga~]#yumlistjava-1.8*Loadedplugins:fastestmirrorRepositorybaseislistedmorethanonceintheconfiguration......
  • Java中使用easyexcel导入导出数据
    工作中常常遇到导入导出Excel数据,还需要设置表格边框、合并单元格、字体居中等等各种样式,尝试了多种方式觉得阿里的easyexcel挺好使,记录一下使用、表格样式如下:导入依赖<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId>......
  • Java基础知识总结(下)
    本文部分内容节选自JavaGuide,地址:https://javaguide.cn/java/basis/java-basic-questions-03.html......
  • 【LeetCode 1793 】好子数组的最高分数
    题目描述原题链接:LeetCode.1793好子数组的最高分数解题思路分数由子数组最小值和长度决定,而且确定了子数组必须包含nums[k]的值;从k位置分别向左向右找更小值就是每个子数组的最小值,左右两端边界下标也就确认了子数组长度;直观朴素的解法是利用单调栈将向左向右分别严格递......