做题总结 242. 有效的字母异位词

242. 有效的字母异位词

  • 我的答案
  • 思路优化
  • 出错的知识点(Java)
    • 1、String相关
      • (1)String转换成char数组
      • (2)String不能直接用下标访问
    • 2、HashMap 相关
      • (1)初始化
      • (2)由key得到value
      • (3)遍历map - 增强for循环
      • (4)数组和hashmap的length区别
      • (5)getOrDefault方法

我的答案

class Solution {
    public boolean isAnagram(String s, String t) {
        //String变成数组,toCharArray 
        //String不能用下标访问
        char[] ss = s.toCharArray();
        char[] tt = t.toCharArray();
        HashMap<Character,Integer> map = new HashMap<Character, Integer>();
        //s
        for(int i=0; i<ss.length; i++) {
            if(!map.containsKey(ss[i])) {//不存在
                map.put(ss[i], 1);
            } else {
                map.put(ss[i],map.get(ss[i])+1);
            }
        }
        //t
        for(int i=0; i<tt.length; i++) {
            if(!map.containsKey(tt[i])) {//不存在
                return false;
            } else {
                map.put(tt[i],map.get(tt[i])-1);//!!请注意要加一 不能++
            }
        }

        //数组和hashmap的length
        for(Character key : map.keySet()) {
            if(map.get(key) != 0) {
                return false;
            }
        }
        return true;
    }
}

在这里插入图片描述

思路优化

参考代码随想录

题目“s 和 t 仅包含小写字母”,且字母小a到字母小b的ASCII码是连续的(a是97)
什么时候用数组、set、map?
在哈希值比较小、范围比较小(26个字母)的情况下用数组就可以。

出错的知识点(Java)

1、String相关

(1)String转换成char数组

toCharArray方法

String s="XXXXX";
char[] ss = s.toCharArray();

(2)String不能直接用下标访问

String s 可以通过 s.charAt(i) 访问

public char charAt(int index)

2、HashMap 相关

(1)初始化

首先注意<key , value>中的 key 和 value 都是 Object。所以 要用到包装类:char->Character, int->Integer。

HashMap<Character,Integer> map = new HashMap<Character, Integer>();

(2)由key得到value

get方法
public Value get(Object key)

map.put(ss[i],map.get(ss[i])+1);

调用函数的时候向上转型?或者装箱拆箱。传进去的ss[i]是char,但是get方法里使用Object接收的。
这里的 map.get(ss[i])+1) 也不可以用自增运算符++代替。 Integer对象执行++操作之后是返回一个新的Integer对象。

https://www.yisu.com/zixun/195481.html

我猜测这里的+1其实1自动装箱为对象然后进行运算。但是这两天IDEA到期了,还看不了源码。

(3)遍历map - 增强for循环

//HashMap<Character,Integer> map = new HashMap<Character, Integer>();
for(Character key : map.keySet()) {
     if(map.get(key) != 0) {
         return false;
     }
 }

(4)数组和hashmap的length区别

数组 char[] a 的长度为 a.length
Hashmap map的长度为 map.length()
Hashmap 是一个类,访问类方法得到它的长度,类方法的访问需要加括号。然而数组char[]不是类。

(5)getOrDefault方法

public V getOrDefault(Object key, V defaultValue)
返回指定键映射到的值,如果此映射不包含键的映射, defaultValue

请看下面代码的逻辑:如果 map中没有键 tt[i] ,那么就加入 map,value设置为1。如果本来就存在键 tt[i] ,value加一。其实就是计数。

//输入String t;
//char[] tt = t.toCharArray();
//HashMap<Character,Integer> map = new HashMap<Character, Integer>();

for(int i=0; i<ss.length; i++) {
       if(!map.containsKey(ss[i])) {//不存在
           map.put(ss[i], 1);
       } else {
           map.put(ss[i],map.get(ss[i])+1);
       }
   }

这一段代码可以用 getOrDefault 方法优化

 for (int i = 0; i < s.length(); i++) {
     char ch = s.charAt(i);
     map.put(ch, table.getOrDefault(ch, 0) + 1);
 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/257946.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

向本地maven中加载依赖

1、现在maven官网仓库找到相应依赖 Maven Repository: Search/Browse/Explore (mvnrepository.com) 2、下载相应jar包 3、使用maven命令在jar所在文件加内cmd运行 注意修改参数 -DgroupId&#xff1a;表示jar对应的groupId <groupId>io.confluent</groupId>…

HarmonyOS应用开发-手写板(二)

在前一篇手写板的文章中&#xff08;HarmonyOS应用开发-手写板-CSDN博客&#xff09;&#xff0c;我们通过使用Path实现了一个基本的手写板&#xff0c;但遗憾的是&#xff0c;无法保存所绘制的图像。在本文中&#xff0c;我们将采用canvas和Path2D来重新构建手写板应用。依然只…

ArcGIS Pro中去除黑边方法汇总

在有些时候&#xff08;比如镶嵌栅格后&#xff09;&#xff0c;我们获取到的影像数据可能会有黑边&#xff0c;这里为大家汇总一下在ArcGIS Pro中去除黑边的方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的数据是从水经微图中下载的影像数据&#xff0c;除了…

YOLOv8改进 | 主干篇 | 轻量级网络ShuffleNetV1(附代码+修改教程)

一、本文内容 本文给大家带来的改进内容是ShuffleNetV1&#xff0c;这是一种为移动设备设计的高效CNN架构。它通过使用点群卷积和通道混洗等操作&#xff0c;减少了计算成本&#xff0c;同时保持了准确性&#xff0c;通过这些技术&#xff0c;ShuffleNet在降低计算复杂度的同时…

1.【分布式】分布式事务详解

分布式事务 1.分布式事务是什么&#xff1f;数据库事务 2.分布式事务产生的原因&#xff1f;存储层拆分服务层拆分 3.分布式事务解决方案4.分布式事务有哪些开源组件SeateTCC 分布式服务组件基于消息补偿的最终一致性 5.两阶段提交&#xff0c;三阶段协议详解二阶段提交协议三阶…

长短期记忆(LSTM)神经网络-多输入分类

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分程序&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…

SpringCloud源码探析(十二)-基于SpringBoot开发自定义中间件

1.概述 中间件是一种介于操作系统和应用软件之间&#xff0c;为应用软件提供服务功能的软件&#xff0c;按功能划分有消息中间件&#xff08;Kafka、RocketMQ&#xff09;、通信中间件&#xff08;RPC通信中间件&#xff0c;dubbo等&#xff09;&#xff0c;应用服务器等。中间…

k8s-ingress特性 9

TLS加密 创建证书 测试访问 auth认证 创建认证文件 rewrite重定向 进入域名时&#xff0c;会自动重定向到hostname.html 示例&#xff1a; 测试 版本的升级迭代&#xff0c;之前利用控制器进行滚动更新&#xff0c;在升级过程中无法做到快速回滚 更加平滑的升级&#xff1…

Axure中继器的使用实现表格的增删改查的自定义文件

目录 一.认识中继器 1.1.什么中继器 1.2. 中继器的组成 1.3.中继器的使用场景 二.中继器进行增删改查 三.十例表格增删改查 还有Axure这个东西许多东西需要我们去发现&#xff0c;我们需要去细心的研究&#xff0c;我们一起加油吧&#xff01;&#xff01;&#xff01;今…

Opencv实验合集——实验四:图片融合

1.概念 图像融合是将两个或多个图像结合在一起&#xff0c;创建一个新的图像的过程。这个过程的目标通常是通过合并图像的信息来获得比单个图像更全面、更有信息量的结果。图像融合可以在许多领域中应用&#xff0c;包括计算机视觉、遥感、医学图像处理等。 融合的方法有很多…

无人机在融合通信系统中的应用

无人驾驶飞机简称“无人机”&#xff0c;是利用无线电遥控设备和自备的程序控制装置操纵的不载人飞行器&#xff0c;现今无人机在航拍、农业、快递运输、测绘、新闻报道多个领域中都有深度的应用。 在通信行业中&#xff0c;无人机广泛应用于交通&#xff0c;救援&#xff0c;消…

第十七章 爬虫scrapy登录与中间件2

文章目录 数据盘区太快会报错&#xff0c;setting中配置延迟 连接提取器

elementui中的el-table,当使用fixed属性时,table主体会遮挡住滚动条的大半部分,导致很难选中。

情况&#xff1a; 解决&#xff1a; el-table加个类&#xff0c;这里取为class"table" 然后是样式部分&#xff1a; <style scoped lang"scss"> ::v-deep.table {// 滚动条高度调整::-webkit-scrollbar {height: 15px;}// pointer-events 的基本信…

监控k8s controller和scheduler,创建serviceMonitor以及Rules

目录 一、修改kube-controller和kube-schduler的yaml文件 二、创建service、endpoint、serviceMonitor 三、Prometheus验证 四、创建PrometheusRule资源 五、Prometheus验证 直接上干货 一、修改kube-controller和kube-schduler的yaml文件 注意&#xff1a;修改时要一个节…

Databend 开源周报第 124 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 新增对 Delta 和…

SpringBlade export-user SQL 注入漏洞复现

0x01 产品简介 SpringBlade 是一个由商业级项目升级优化而来的 SpringCloud 分布式微服务架构、SpringBoot 单体式微服务架构并存的综合型项目。 0x02 漏洞概述 SpringBlade v3.2.0 及之前版本框架后台 export-user 路径存在安全漏洞,攻击者利用该漏洞可通过组件customSqlS…

node.js mongoose中间件(middleware)

目录 简介 定义模型 注册中间件 创建doc实例&#xff0c;并进行增删改查 方法名和注册的中间件名相匹配 执行结果 分析 错误处理中间件 手动抛出错误 注意点 简介 在mongoose中&#xff0c;中间件是一种允许在执行数据库操作前&#xff08;pre&#xff09;或后&…

【AI图集】猫狗的自动化合成图集

猫是一种哺乳动物&#xff0c;通常被人们作为宠物饲养。它们有柔软的毛发&#xff0c;灵活的身体和尖锐的爪子。猫是肉食性动物&#xff0c;主要以肉类为食&#xff0c;但也可以吃一些蔬菜和水果。猫通常在夜间活动&#xff0c;因此它们需要足够的玩具和活动空间来保持健康和快…

【python基础】-- yarn add 添加依赖的各种类型

目录 1、安装 yarn 1.1 使用npm安装 1.2 查看版本 1.3 yarn 淘宝源配置 2、安装命令说明 2.1 yarn add&#xff08;会更新package.json和yarn.lock&#xff09; 2.2 yarn install 2.3 一些操作 2.3.1 发布包 2.3.2 移除一个包 2.3.3 更新一个依赖 2.3.4 运行脚本 …

ASP.NET Core MVC依赖注入理解(极简个人版)

依赖注入 文献来源&#xff1a;《Pro ASP.NET Core MVC》 Adam Freeman 第18章 依赖注入 1 依赖注入原理 所有可能变化的地方都用接口在使用接口的地方用什么实体类通过在ConfigureService中注册解决注册的实体类需要指定在何种生命周期中有效 TransientScopedSingleton 2…