力扣Lc21--- 389. 找不同(java版)-2024年3月26日

news2024/11/22 18:05:13

1.题目描述
在这里插入图片描述
2.知识点
(1)在这段代码中:

     // 统计字符串s中每个字符的出现次数
        for (int i = 0; i < s.length(); i++) {
            count[s.charAt(i) - 'a']++;
        }

对于字符串s = “abcd”:

当 i = 0,s.charAt(i) = ‘a’,ASCII值为97。

97 - ‘a’ = 97 - 97 = 0
所以 count[0] 的值增加1,变为 count[0] = 1。
当 i = 1,s.charAt(i) = ‘b’,ASCII值为98。

98 - ‘a’ = 98 - 97 = 1
所以 count[1] 的值增加1,变为 count[1] = 1。
当 i = 2,s.charAt(i) = ‘c’,ASCII值为99。

99 - ‘a’ = 99 - 97 = 2
所以 count[2] 的值增加1,变为 count[2] = 1。
当 i = 3,s.charAt(i) = ‘d’,ASCII值为100。

100 - ‘a’ = 100 - 97 = 3
所以 count[3] 的值增加1,变为 count[3] = 1。

count[0] = 1(代表'a'的计数)
count[1] = 1(代表'b'的计数)
count[2] = 1(代表'c'的计数)
count[3] = 1(代表'd'的计数)

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  // 遍历字符串t,减少相应字符的计数
        for (int i = 0; i < t.length(); i++) {
            count[t.charAt(i) - 'a']--;
        }

对于字符串t = “abcde”:

当 i = 0,t.charAt(i) = ‘a’,ASCII值为97。

97 - ‘a’ = 97 - 97 = 0
所以 count[0] 的值减少1,变为 count[0] = 0。
当 i = 1,t.charAt(i) = ‘b’,ASCII值为98。

98 - ‘a’ = 98 - 97 = 1
所以 count[1] 的值减少1,变为 count[1] = 0。
当 i = 2,t.charAt(i) = ‘c’,ASCII值为99。

99 - ‘a’ = 99 - 97 = 2
所以 count[2] 的值减少1,变为 count[2] = 0。
当 i = 3,t.charAt(i) = ‘d’,ASCII值为100。

100 - ‘a’ = 100 - 97 = 3
所以 count[3] 的值减少1,变为 count[3] = 0。
当 i = 4,t.charAt(i) = ‘e’,ASCII值为101。

101 - ‘a’ = 101 - 97 = 4
所以 count[4] 的值减少1,变为 count[4] = -1。

count[0] = 0(代表'a'的计数)
count[1] = 0(代表'b'的计数)
count[2] = 0(代表'c'的计数)
count[3] = 0(代表'd'的计数)
count[4] = -1(代表'e'的计数)

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
在Java中使用两个char类型的字符进行加法操作时,实际上是对它们的ASCII码进行了加法操作。

例如,当你执行 ‘a’ + ‘c’,它会按照它们的ASCII码值进行加法计算。‘a’ 的ASCII码值是97,‘c’ 的ASCII码值是99。

所以,‘a’ + ‘c’ 的结果是 97 + 99 = 196。

public class Main {
    public static void main(String[] args) {
        char a = 'a';
        char c = 'c';
        
        int result = a + c;
        
        System.out.println(result);  // 输出196
        System.out.println((char) result);  // 输出对应的字符 'Ô'
    }
}


toCharArray() 是 Java 中 String 类的一个方法,它将字符串转换为一个字符数组。这个方法返回一个新的字符数组,其中包含字符串中的所有字符。

3.代码实现
方法1:

class Solution {
    public char findTheDifference(String s, String t) {

        int[] cnt=new int[26]; //新建一个数组,可以存储小写字母a~z
        for(int i=0;i<s.length();i++)
        {
            cnt[s.charAt(i)-'a']++;//原字符串中有出现过的字符 进行+1操作
        }
        for(int i=0;i<t.length();i++)
        {
            cnt[t.charAt(i)-'a']--;//新字符串中出现过的字符进行-1操作
            //t.charAt(i)-'a',得到数组索引。计算该字符相对于字符'a'的偏移量,将字符映射到count数组的相应位置。
            //count[s.charAt(i) - 'a']: 获取count数组中对应索引的值。
        }

        // 找出计数小于0的那个字符,并返回它
        for(int i=0;i<26;i++)
        {
            if(cnt[i]<0)
            {
                return(char)(i+'a');
                //i+'a'将整数i与字符'a'的ASCII值相加,以获取相应字符的ASCII值。
                //(char) (i + 'a'):将得到的ASCII值转换为对应的字符。
            }
            
        }
          // 如果没有找到计数小于0的字符,返回空格           
            return ' ';
        
    }
}

方法2:

class Solution {
    public char findTheDifference(String s, String t) {
        int Sums=0;
        int Sumt=0;
        for(char c:s.toCharArray())
        {
            Sums+=c;
        }
       for(char m:t.toCharArray())
       {
        Sumt+=m;
       }
       int digit=Sumt-Sums;
       return (char)digit;
        
    }
}

方法3:

class Solution {
    public char findTheDifference(String s, String t) {
        int Sums=0;
        int Sumt=0;
      //  for(char c:s.toCharArray()) 加强的for循环
        for(int i=0;i<s.length();i++)
        {
            Sums+=s.charAt(i);
        }
      // for(char m:t.toCharArray())
       for(int i=0;i<t.length();i++)
       {
        Sumt+=t.charAt(i);
       }
       int digit=Sumt-Sums;
       return (char)digit;
        
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kali开启远程服务

一&#xff0c;先切换root账户 二、kali开启远程服务 1&#xff0c;修改远程登录的配置文件 vim /etc/ssh/sshd_config &#xff08;用文本编辑器打开此文件) 在文件的普通模式下&#xff0c;使用/PermitRootLogin&#xff0c;回车&#xff0c;查找到该行&#xff0c;i&#…

鸿蒙OS开发实例:【demo选择列表限定数量】

效果图&#xff1a; 示例代码 // 使用 DevEco Studio 3.1.1 Release 及以上版本&#xff0c;API 版本为 api 9 及以上。 // 主要功能及注意事项&#xff1a; // 该组件展示了一个乘客选择列表。列表中的每个项目包含一个复选框和对应的乘客姓名&#xff0c; // 用户点击任意一…

Redis如何应对缓存穿透问题——Java全栈知识(9)

我们在正常使用缓存的时候的流程大概就是这样的&#xff1a; 请求访问缓存&#xff0c;缓存有数据就返回&#xff0c;缓存无数据就去数据库里面查数据写入到缓存中。 1、缓存穿透问题 但是如果由恶意请求&#xff0c;短时间内大量的访问不存在的数据&#xff0c;这时每个请求…

工作中遇到的疑难杂症,以及解决办法

一 pagehelper和自定义mybatis拦截器冲突bug 1.1 问题描述 当在springboot工程&#xff0c;持久层使用mybatis&#xff0c;且使用pagehelper实现分页功能&#xff0c;当随着业务发展&#xff0c;需要自定义一个mybatis的拦截器实现sql的打印&#xff0c;但是出现拦截器失效&…

flac和mp3可以互相转换吗?flac和mp3互相转换的方法

一&#xff0c;什么是FLAC格式 FLAC即是Free Lossless Audio Codec的缩写&#xff0c;中文可解为无损音频压缩编码。FLAC是一套著名的自由音频压缩编码&#xff0c;其特点是无损压缩。不同于其他有损压缩编码如MP3 及 AAC&#xff0c;它不会破坏任何原有的音频资讯&#xff0c…

【保姆级教程】YOLOv8自动数据标注

一、YOLOV8环境准备 1.1 下载安装最新的YOLOv8代码 仓库地址&#xff1a; https://github.com/ultralytics/ultralytics1.2 配置环境 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple1.3 安装labelme标注工具 pip install labelme二、半自动标注…

MATLAB 自定义生成直线点云(详细介绍) (47)

MATLAB 自定义生成直线点云 (详细介绍)(47) 一、算法介绍二、具体步骤二、算法实现1.代码2.效果一、算法介绍 通过这里的直线生成方法,可以生成模拟直线的点云数据,并通过调整起点、终点、数量和噪声水平等参数来探索不同类型的直线数据。这种方法可以用于测试、验证和开…

【考研数学】跟武忠祥,如何使用好《复习全书》和《高数辅导讲义》?

本人就是全程跟武忠祥老师高分上岸的&#xff01; 高数辅导讲义建议在强化阶段再买就行 在基础阶段把基础篇吃透就ok 本人属于基础很差相当于是零基础的考研党&#xff0c;经过一年备考成功上岸 中间花费了很多时间在考研数学备考信息检索上&#xff0c;写下这篇希望能帮助…

H264码流结构介绍

H264的码流格式 一般有两种格式&#xff1a; 1、Annex B&#xff08;字节流格式&#xff09;&#xff1a;由Network Abstraction Layer Units (NALU)组成&#xff0c;也被称为NAL。每个NALU包都可以被单独解析和处理。 2、MP4格式&#xff0c;也叫RTP包格式。MP4 格式没有起始…

Java Web-Maven

Maven是apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具 Maven的作用 1.依赖管理:方便快捷的管理项目依赖资源(jar包)&#xff0c;避免版本冲突问题 我们有的项目需要大量的jar包&#xff0c;采用手动导包的方式非常繁琐&#xff0c;并且版本升级也…

睿眼(Realeye)视觉识别模型训练全流程心得分享

睿眼&#xff08;Realeye&#xff09;是一款集智能采集、识别、定位、抓取、视控全流程为一体的 AI 产品&#xff0c; 以其 AI 算法结合机械臂硬件实现对万事万物的定位抓取功能&#xff0c;能够实现对任意目标物从图 片采集、标注到模型训练和抓取。通过人性化的交互方式、易操…

深度剖析python的就业面

技术行业&#xff0c;一定要提升技术功底&#xff0c;丰富项目实战经验&#xff1b; 这对于你未来几年职业规划&#xff0c;以及测试技术掌握的深度非常有帮助。 WEB开发 尽管目前Python并不是做Web开发的首选&#xff0c;但这仍是一个比较热门的方向。 现如今有不少知名网…

【STL学习】(2)string的模拟实现

前言 本文将模拟实现string的一些常见功能&#xff0c;目的在于加深理解string与回顾类与对象的相关知识。 一、前置知识 string是表示可变长的字符序列的类string的底层是使用动态顺序表存储的string对象不以’\0’字符为终止算长度&#xff0c;而是以size有效字符的个数算长…

嵌入式开发过程中应该养成的习惯!

最近有一些读者来咨询:有什么需要注意的编程好习惯?给大家分享一下。 第一:多看官方文档 不要被这几个字吓到,官方文档其实都是宝藏。 一个成熟的技术诞生,可以没有博客没有书籍,但一定会有一个官方文档,毋庸置疑,它一定是最准确、最实时的资料。编写官方文档的人,…

【SAP2000】碰撞分析 Impact Analysis

碰撞分析 Impact Analysis CSI程序的动力分析功能非常广泛。一个例子是分析两个质量或结构之间碰撞效应的能力。 The possibilities of dynamic analysis with CSI programs are very extensive. An example of this is the ability to analyze the effects of collision bet…

Leetcode算法题笔记(2)

目录 图论51. 岛屿数量解法一 52. 腐烂的橘子解法一 53. 课程表解法一 54. 实现 Trie (前缀树)解法一 回溯55. 全排列解法一 56. 子集解法一解法二 57. 电话号码的字母组合解法一 58. 组合总和解法一解法二 59. 括号生成解法一解法二 60. 单词搜索解法一 61. 分割回文串解法一 …

一文看懂什么是OpenHarmony流转架构

随着全场景多设备的生活方式不断深入&#xff0c;用户拥有的设备越来越多&#xff0c;不同设备都能在适合的场景下提供良好的体验&#xff0c;例如手表可以提供及时的信息查看能力&#xff0c;电视可以带来沉浸的观影体验。但是&#xff0c;每个设备也有使用场景的局限&#xf…

【Python】Data Science with Python 数据科学(1)环境搭建

一、操作系统 使用运行在Windows11主机上的Ubuntu 22.04虚拟机&#xff0c;虚拟化平台为Oracle VM VirtualBox。 二、PyCharm安装 有关PyCharm的安装和快捷方式创建&#xff0c;可分别参考我的博客 Ubuntu安装PyCharm、Ubuntu创建桌面快捷方式 &#xff0c;以及Ubuntu创建桌…

systemd-journal(一)之journalctl命令详解

文章目录 写在前面概述描述不传递参数传递一个或多个匹配参数示例 源选项用法--system, --user-M, --machine-m, --merge-D DIR, --directoryDIR--fileGLOB--rootROOT--imageIMAGE--image-policypolicy--namespaceNAMESPACE 过滤选项用法-S, --since, -U, --until举例&#xff…

孙中茂:摸清自己的性格很重要,只要你的本事够了,在哪个地方都是都会发光的。

《程客有话说》是我们最新推出的一个访谈栏目&#xff0c;邀请了一些国内外有趣的程序员来分享他们的经验、观点与成长故事&#xff0c;我们尝试建立一个程序员交流与学习的平台&#xff0c;也欢迎大家推荐朋友或自己来参加我们的节目&#xff0c;一起加油。 本期我们邀请的程…