LeetCode面试热题150中19-22题学习笔记(用Java语言描述)

news2025/4/20 6:02:48

Day 04

19、最后一个单词的长度

需求:给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

代码表示
public class Q19_1 {
    public static int lengthOfLastWord(String s) {
        /*从字符串末尾开始去除空格
         *   从末尾开始,只要当前字符串是空格
         *   就end-1,直到遇到非空格字符串   */
        int end = s.length() - 1;   //记录最后一个字符的索引
        while (end >= 0 && s.charAt(end) == ' ') {
            end--;
        }

        /*计算最后一个单词的长度
        *   start初始化为end,也就是最后一个非空格字符的索引
        *   利用while循环,从end开始向前遍历
        *   只要当前字符不是空格,就把start-1
        *   直到遇到空格或者到达字符串的开头    */
        int start = end;    //start开始也指向最后一个单词的最后一个字符的索引
        while (start >= 0 && s.charAt(start) != ' ') {
            start--;
        }

        /*返回最后一个单词的长度
        *   start指向最后一个单词的前一个位置
        *   end指向最后一个单词的最后一个字符
        *   差值即为最后一个单词的长度*/
        return end - start;
    }
}
代码讲解

第7行:

  • s 是一个 String 类型的对象,代表一个字符串。

  • charAt(int index)String 类的一个实例方法,它的作用是返回字符串中指定索引位置的字符。该方法的参数 index 是一个整数,表示要获取的字符在字符串中的位置。需要注意的是,Java 中字符串的索引是从 0 开始的,也就是说,第一个字符的索引是 0,第二个字符的索引是 1,依此类推。

    例:

    public class CharAtExample {
        public static void main(String[] args) {
            String s = "Hello";
            
            char firstChar = s.charAt(0);
            char secondChar = s.charAt(1);
            
            System.out.println("第一个字符: " + firstChar);
            System.out.println("第二个字符: " + secondChar);
        }
    }
    

    上述代码运行后,输出结果为:

    第一个字符: H
    第二个字符: e
    

20、最长公共前缀

需求:编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""

代码表示
public class Q20_1 {
    public static String longesCommonPrefixes(String[] strs) {
        /*边界条件检查
         *   如果输入的字符串是空或者长度为0
         *   直接返回    */
        if (strs == null || strs.length == 0) {
            return "";
        }

        String prefix = strs[0];    //初始化公共前缀

        for (int i = 0; i < strs.length; i++) { //从数组的第二个字符串(索引为 1)开始遍历,直至遍历完整个数组。
            while (!strs[i].startsWith(prefix)) {//检查字符串 strs[i] 是否以当前的公共前缀 prefix 开头。若不是,则进入循环。
                if (prefix.length() == 0) { //若 prefix 的长度为 0,意味着不存在公共前缀,直接返回空字符串。
                    return " ";
                }
                prefix = prefix.substring(prefix.length() - 1); //去掉 prefix 的最后一个字符,然后继续检查新的 prefix 是否为 strs[i] 的前缀,不断重复这个过程,直到 prefix 成为 strs[i] 的前缀。
            }
        }
        return prefix;  //返回公共前缀
    }
}
代码讲解

第13行:

  • strs [i] : strs 是一个字符串数组,用于存储多个字符串。i 是索引。

  • startsWith (String prefix) 方法:

    这是 Java 中 String 类的一个实例方法,用于检查当前字符串是否以指定的前缀开头。

    该方法接收一个字符串参数 prefix ,若当前字符串以 prefix 开头,返回 true,否则返回 false。

复杂度分析

时间复杂度为 O ( S ) O(S) O(S),S为字符串中元素的个数,最坏情况下需要遍历整个字符串。


21、反转字符串中的单词

需求:给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

**注意:**输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

思路

先去除字符串首尾空格,再按空格分割字符串得到单词数组,接着反转数组中单词的顺序,最后重新组合成字符串。

代码表示
public class Q21_1 {
    public static String reverseWords(String s) {
        /*去除首位空格并分割字符串
         *   trim() 是 String 类的方法,用于去除字符串 s 首尾的空格。
         * 例如,若 s 为 " hello world! ",调用 trim() 后得到 "hello world!"。
         *   split() 是 String 类的方法,用于根据指定的正则表达式分割字符串。
         *   \\s+ 是一个正则表达式,\\s 表示匹配任何空白字符(包括空格、制表符、换页符等)
         *   + 表示匹配前面的元素(即空白字符)一次或多次。
         *   所以 split("\\s+") 会将字符串按一个或多个空格分割成多个子字符串,并存入一个字符串数组 words 中。
         *   例如,对于 "hello world!",分割后得到 ["hello","world!"] */
        String[] words = s.trim().split("\\s+");

        StringBuilder reversed = new StringBuilder();   //创建对象

        /*反转单词顺序并拼接字符串
         *   从数组的最后一个元素开始向前遍历单词数组    */
        for (int i = words.length - 1; i >= 0; i--) {
            reversed.append(words[i]);  //将当前单词添加到StringBuilder对象reversed中。
            if (i > 0) {  //如当前单词不是数组中的第一个单词,则在该单词后加一个空格。
                reversed.append(" ");
            }
        }

        /*toString() 是 StringBuilder 类的方法,用于将 StringBuilder 对象中的字符序列转换为字符串。*/
        return reversed.toString();
    }
}

22、找出字符串中第一个匹配项的下标

需求:给你两个字符串 haystackneedle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1

代码展示
public class Q22_1 {
    public static int strStr(String haystack, String needle) {
        int hayLength = haystack.length();  //获取两个字符串的长度
        int needleLength = needle.length();

        if (needleLength == 0) {  //两个异常情况
            return 0;
        }
        if (hayLength < needleLength) {
            return -1;
        }

        /*外层for循环
         *   i是haystack中可能的起始下标,循环范围从0-hayLength - needleLength*/
        for (int i = 0; i < hayLength - needleLength; i++) {
            int j;//用于遍历needle字符串
            for (j = 0; j < needleLength; j++) {
                if (haystack.charAt(i + j) != needle.charAt(j)) {   //比较 haystack 从 i 开始的第 j 个字符和 needle 的第 j 个字符是否相等
                    break;
                }
            }
            if (j == needleLength) {    //匹配成功
                return i;
            }
        }
        return -1;
    }
}

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

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

相关文章

Visual Studio Code 开发 树莓派 pico

开发环境 MCU&#xff1a;Pico1&#xff08;无wifi版&#xff09;使用固件&#xff1a;自编译版本开发环境&#xff1a;Windows 10开发工具&#xff1a;Visual Studio Code 1.99.2开发语言&#xff1a;MicroPython & C 插件安装 找到Raspberry Pi Pico并安装开启科学上网…

Python与R语言用XGBOOST、NLTK、LASSO、决策树、聚类分析电商平台评论信息数据集

全文链接&#xff1a;https://tecdat.cn/?p41501 分析师&#xff1a;Rui Liu 在当今数字化浪潮席卷的时代&#xff0c;电商市场的蓬勃发展犹如一部波澜壮阔的史诗&#xff0c;蕴藏着无尽的商业价值与潜力。电商平台积累的海量数据&#xff0c;宛如一座等待挖掘的宝藏&#xff…

半导体制造如何数字化转型

半导体制造的数字化转型正通过技术融合与流程重构&#xff0c;推动着这个精密产业的全面革新。全球芯片短缺与工艺复杂度指数级增长的双重压力下&#xff0c;头部企业已构建起四大转型支柱&#xff1a; 1. 数据中枢重构产线生态 台积电的「智慧工厂4.0」部署着30万物联网传感器…

LabVIEW 程序持续优化

LabVIEW 以其独特的图形化编程方式&#xff0c;在工业自动化、测试测量、数据分析等众多领域发挥着关键作用。为了让 LabVIEW 程序始终保持高效、稳定&#xff0c;并契合不断变化的实际需求&#xff0c;持续改进必不可少。下面将从多个关键维度&#xff0c;为大家细致地介绍通用…

Windows10系统RabbitMQ无法访问Web端界面

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 项目场景&#xff1a; 在一个基于 .NET 的分布式项目中&#xff0c;团队使用 RabbitMQ 作为消息队列中间件&#xff0c;负责模块间的异步通信。开发环境为 Windows 10 系统&#xff0c;开发人员按照官…

初阶数据结构--链式二叉树

二叉树&#xff08;链式结构&#xff09; 前面的文章首先介绍了树的相关概念&#xff0c;阐述了树的存储结构是分为顺序结构和链式结构。其中顺序结构存储的方式叫做堆&#xff0c;并且对堆这个数据结构进行了模拟实现&#xff0c;并进行了相关拓展&#xff0c;接下来会针对链…

SpringAI版本更新:向量数据库不可用的解决方案!

Spring AI 前两天&#xff08;4.10 日&#xff09;更新了 1.0.0-M7 版本后&#xff0c;原来的 SimpleVectorStore 内存级别的向量数据库就不能用了&#xff0c;Spring AI 将其全部源码删除了。 此时我们就需要一种成本更低的解决方案来解决这个问题&#xff0c;如何解决呢&…

BladeX单点登录与若依框架集成实现

1. 概述 本文档详细介绍了将BladeX认证系统与若依(RuoYi)框架集成的完整实现过程。集成采用OAuth2.0授权码流程&#xff0c;使用户能够通过BladeX账号直接登录若依系统&#xff0c;实现无缝单点登录体验。 2. 系统架构 2.1 总体架构 #mermaid-svg-YxdmBwBtzGqZHMme {font-fa…

JVM 内存调优

内存调优 内存泄漏&#xff08;Memory Leak&#xff09;和内存溢出&#xff08;Memory Overflow&#xff09;是两种常见的内存管理问题&#xff0c;它们都可能导致程序执行不正常或系统性能下降&#xff0c;但它们的原因和表现有所不同。 内存泄漏 内存泄漏&#xff08;Memo…

Shell脚本提交Spark任务简单案例

一、IDEA打包SparkETL模块&#xff0c;上传值HDFS的/tqdt/job目录 二、创建ods_ETL.sh脚本 mkdir -p /var/tq/sh/dwd vim /var/tq/sh/dwd/ods_ETL.sh chmod 754 /var/tq/sh/dwd/ods——ETL.sh #脚本内容如下 #!/bin/bash cur_date$(date %Y-%m-%d) /opt/bigdata/spark-3.3.2/b…

国标GB28181视频平台EasyCVR视频汇聚系统,打造别墅居民区智能监控体系

一、现状背景 随着国家经济的快速增长&#xff0c;生活水平逐渐提高&#xff0c;私人别墅在城市、乡镇和农村的普及率也在逐年增加。然而&#xff0c;由于别墅区业主经济条件较好&#xff0c;各类不法事件也日益增多&#xff0c;主要集中在以下几个方面&#xff1a; 1&#x…

BGP分解实验·23——BGP选路原则之路由器标识

在选路原则需要用到Router-ID做选路决策时&#xff0c;其对等体Router-ID较小的路由将被优选&#xff1b;其中&#xff0c;当路由被反射时&#xff0c;包含起源器ID属性时&#xff0c;该属性将代替router-id做比较。 实验拓扑如下&#xff1a; 实验通过调整路由器R1和R2的rout…

【玩泰山派】MISC(杂项)- 使用vscode远程连接泰山派进行开发

文章目录 前言流程1、安装、启动sshd2、配置一下允许root登录3、vscode中配置1、安装remote插件2、登录 **注意** 前言 有时候要在开发板中写一写代码&#xff0c;直接在终端中使用vim这种工具有时候也不是很方便。这里准备使用vscode去通过ssh远程连接泰山派去操作&#xff0…

同步/异步日志系统

同步/异步日志系统 项目演示基础测试性能测试测试环境&#xff1a;同步日志器单线程同步日志器多线程异步日志器单线程异步日志器多线程 工具类&#xff08;util.hpp&#xff09;日志等级level.hpp 日志消息message.hpp 日志消息格式化formatter.hpp 日志消息落地sink.hpp 日志…

typescript html input无法输入解决办法

input里加上这个&#xff1a; onkeydown:(e: KeyboardEvent) > {e.stopPropagation();

游戏引擎学习第224天

回顾游戏运行并指出一个明显的图像问题。 回顾一下之前那个算法 我们今天要做一点预加载的处理。上周刚完成了游戏序章部分的所有剪辑内容。在运行这一部分时&#xff0c;如果观察得足够仔细&#xff0c;就会注意到一个问题。虽然因为视频流压缩质量较低&#xff0c;很难清楚…

工厂能耗系统智能化解决方案 —— 安科瑞企业能源管控平台

安科瑞顾强 政策背景与“双碳”战略驱动 2025年《政府工作报告》明确提出“单位国内生产总值能耗降低3%左右”的目标&#xff0c;要求通过产业结构升级&#xff08;如高耗能行业技术革新或转型&#xff09;、能源结构优化&#xff08;提高非化石能源占比&#xff09;及数字化…

【pytorch图像视觉】lesson17深度视觉应用(上)构建自己的深度视觉项目

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、 数据1、认识经典数据1.1入门数据&#xff1a;MNIST、其他数字与字母识别&#xff08;1&#xff09;数据下载&#xff08;2&#xff09;查看数据的特征和标…

USB(TYPE-C)转串口(TTL)模块设计讲解

目录 一 、引言 二、方案设计 三、USB TYPE-C介绍 1、TYPE-C接口定义 1、24P全引脚描述 2、Type C 接口 VBUS/GND 作用 3、Type C 接口 D/D- 作用 1、数据传输&#xff1a; 2、设备识别&#xff1a; 3、充电协议协商&#xff1a; 4、Type C 接口 CC1/CC2 作用 1、主从设备区…

PyTorch张量操作指南:cat、stack、split与chunk的实战拆解

本文深入探讨PyTorch中用于调整张量结构的四个核心函数——torch.cat、torch.stack、torch.split和torch.chunk。通过实际应用场景分析和代码演示&#xff0c;帮助读者掌握它们的功能差异及适用条件&#xff0c;提升模型开发的灵活性与效率。 在深度学习实践中&#xff0c;张量…