当前位置: 首页 > news >正文

面试经典算法150题系列-最后一个单词的长度

最后一个单词的长度

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

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

示例 1:

输入:s = "Hello World"
输出:5
解释:最后一个单词是“World”,长度为 5。

示例 2:

输入:s = "   fly me   to   the moon  "
输出:4
解释:最后一个单词是“moon”,长度为 4。

示例 3:

输入:s = "luffy is still joyboy"
输出:6
解释:最后一个单词是长度为 6 的“joyboy”。

实现思路1:将字符串转成全为单词的字符串列表,然后直接返回最后一个单词的长度即可。

处理:将所给字符串,利用正则表达式进行匹配筛选,将空格去掉后 得到一个全为单词的字符串数组,然后返回最后一个单词的长度即可。

实现代码:

    public  int lengthOfLastWord(String s) {//正则表达式匹配去掉空格,得到单词数组String[] words = s.split("\\s+");//判断数组是否为空if (words.length == 0) {return 0;}//返回最后一个单词的长度return words[words.length - 1].length();//等价于  最后一个单词在数组的索引  int lastWordIndex=words.length-1;//       最后一个单词的长度  int lastWordLength=words[lastWordIndex].length();}
  • split: 这是Java String 类的一个方法,用于根据指定的分隔符将字符串分割成多个子字符串,并返回一个子字符串数组。
  • \\s+: 这是一个正则表达式,其中 \\s 匹配任何空白字符(包括空格、制表符、换行符等),而 + 表示匹配一个或多个前面的字符。因此,\\s+ 将匹配一个或多个连续的空白字符。

(正则表达式详解,在文章的后面进行补充,如果有不懂的可以看看后面的知识补充部分)

实现思路2:通过从后往前遍历,直接计算最后一个单词的长度。

实现步骤:

1.我们需要定义一个变量用于记录最后一个单词的起始索引。

2.去掉字符串前后的字符串(确保前后没有空格),然后从后往前开始遍历,记录当前索引,若是没有遇到空格,则更新用于记录的索引,遇到空格时,遍历使用break关键字跳出循环,说明最后一个单词已经遍历完。

3.返回最后一个单词的长度:字符串长度-起始索引

实现代码:

 public int lengthOfLastWord(String s) {// 如果字符串s为空或为null,返回0if(s.length() == 0 || s == null) {return 0;}// 去除字符串s两端的空白字符s = s.trim();// 初始化start变量,这将用于记录最后一个单词的起始索引int start = 0;// 从字符串的末尾开始向前遍历,直到遇到一个非空格字符for(int i = s.length() - 1; i >= 0; i--) {if(s.charAt(i) == ' ') {// 遇到空格,结束循环break;}// 更新start为当前非空格字符的索引start = i;}// 计算最后一个单词的长度,即字符串长度减去start// 由于start是在最后一个单词的第一个字符上,所以用字符串长度减去start// 得到最后一个单词的长度return s.length() - start;
}

charAt()String 类的一个方法,用于返回指定索引处的字符。

第二种思路实现简单,执行效率比第一种要高。

知识补充:

正则表达式

正则表达式(Regular Expression,简称Regex)是一种用于匹配字符串中字符组合的模式(Pattern)。它使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在编程语言和文本编辑器中,正则表达式通常用于搜索、替换、字符串分割等操作。

以下是一些基本的正则表达式元素和它们的含义:

  • .:匹配任意单个字符(除了换行符)。
  • ^:匹配输入字符串的开始位置。
  • $:匹配输入字符串的结束位置。
  • *:匹配前面的子表达式零次或多次。
  • +:匹配前面的子表达式一次或多次。
  • ?:匹配前面的子表达式零次或一次。
  • {n}:恰好匹配确定的 n 次数。
  • {n,}:至少匹配 n 次。
  • {n,m}:最少匹配 n 次且最多 m 次。
  • []:匹配方括号内的任意字符(字符集)。
  • |:逻辑或操作符,匹配选项或多个表达式中的一个。
  • \:转义特殊字符或表示特殊序列。
  • ():将多个表达式组合成一个子表达式,用于分组。

特殊序列的例子:

  • \d:匹配任意数字,等同于 [0-9]
  • \w:匹配任意字母数字字符,包括下划线,等同于 [A-Za-z0-9_]
  • \s:匹配任意的空白符(包括空格、制表符、换行符等)。

正则表达式在不同的编程语言和工具中语法可能略有不同,但大多数基本元素是通用的。例如,在Java中,你可以使用 java.util.regex 包中的类来处理正则表达式。在Python中,你可以使用 re 模块。

下面是一些正则表达式的使用示例:

  • 匹配一个电子邮件地址:[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+
  • 匹配一个URL:https?://[^\s/$.?#].[^\s]*
  • 匹配一个电话号码:(\+?\d{1,3})?[-. ]?\d{1,4}[-. ]?\d{1,4}[-. ]?\d{1,9}
  • 匹配一个日期格式(如:YYYY-MM-DD):\d{4}-\d{2}-\d{2}

正则表达式是文本处理的强大工具,但它们也可能相当复杂,特别是当涉及到复杂的模式匹配时。

相关文章:

面试经典算法150题系列-最后一个单词的长度

最后一个单词的长度 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 输入:s "Hello World&qu…...

RTT学习

电源管理组件 嵌入式系统低功耗管理的目的在于满足用户对性能需求的前提下,尽可能降低系统功耗以延长设备待机时间。 高性能与有限的电池能量在嵌入式系统中矛盾最为突出,硬件低功耗设计与软件低功耗管理的联合应用成为了解决矛盾的有效手段。 现在的各…...

前端面试题(二十五)|附赠完整面试流程

📝📝今日分享:前端面试题系列继续更新啦! 🤔🤔面试题是什么呢?这份前端面试题主要是上海某银行的中级前端面试题,面试时长属实没想到,挺短的!但从整个面试流程…...

【分布式系统】关于主流的几款分布式链路追踪工具

Jaeger 标准化与兼容性: Jaeger 支持 OpenTracing 和 OpenTelemetry 标准,这意味着它可以与各种微服务架构和应用框架无缝集成,提供了广泛的兼容性和灵活性。 数据存储选项: Jaeger 支持多种数据存储后端,如 Cassandra…...

【吸引力法则】探究人生欲:追求深度体验与宇宙链接

文章目录 什么是人生欲?唤醒人生欲:克服配得感的三大障碍1 第一大障碍:法执的压制2 第二大障碍:家庭的继承2.1 家庭创伤的代际传递2.2 家庭文化基因的传递2.2.1 “成年人最大的美德是让自己的生活过得更加精彩。”2.2.2 荷欧波诺波…...

REST framework-通用视图[Generic views]

Django’s generic views… were developed as a shortcut for common usage patterns… They take certain common idioms and patterns found in view development and abstract them so that you can quickly write common views of data without having to repeat yourself…...

行驶证OCR识别接口如何用Java调用

一、什么是行驶证OCR识别接口? 传入行驶证照片,行驶证图片上的文字信息,返回包括所有人、品牌型号、住址、车牌号、发动机号码、车辆识别代号、注册日期、发证日期等信息。 行驶证 OCR 接口的主要作用是代替手动输入,提高信息录…...

8月15日笔记

masscan安装使用 首先需要有c编译器环境。查看是否有c编译器环境: gcc -v如果系统中已经安装了 GCC,这个命令将输出 GCC 的版本信息。如果未安装,你会看到类似于 “command not found” 的错误消息。 如果没有下载,使用如下命令…...

CSS3 圆角

CSS3 圆角 引言 在网页设计中,圆角矩形是一种常见的设计元素,它们为页面带来了柔和的视觉体验。随着CSS3的推出,实现圆角矩形变得异常简单,无需依赖图片或复杂的JavaScript代码。本文将详细介绍CSS3中用于创建圆角矩形的border-…...

VUE项目中main.js中不能使用 @引入路径吗

VUE项目中main.js中不能使用 引入路径吗 vite.config已经配置了别名 但是在main.js中直接引入报错 修改成 相对路径后,保存消失 找到原因:vite.config 漏了引入 import { defineConfig } from ‘vite’ import vue from ‘vitejs/plugin-vue’ 导致…...

Spring日志

1.日志的作用 定位和发现问题(主要)系统监控数据采集日志审计...... 2.日志的使用 2.1 ⽇志格式的说明 2.2 打印日志 Spring集成了日志框架,直接使用即可 步骤: 1.定义日志对象 2.使⽤⽇志对象打印⽇志 RestController public class LoggerController {private static Logger…...

年薪30万+,TOP大厂月薪10万+....网络安全工程师凭什么?

时代飞速发展,我们的工作、生活乃至整个社会的运转都越来越依赖于网络。也因此,网络的无处不在带来了前所未有的安全风险。 从个人隐私泄露到企业机密被盗,再到国家关键基础设施遭受攻击,网络安全问题无处不在,威胁着…...

WebView 的常见的安全漏洞:

WebView 可能存在以下一些常见的安全漏洞: 跨站脚本攻击(XSS):恶意脚本可能通过网页注入到 WebView 中,从而获取用户数据或执行其他恶意操作。 跨站请求伪造(CSRF):攻击者可能诱导 …...

【python】Python中subprocess模块的参数解读以及应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

opencv-python实战项目十一:背景减除法制作运动行人蒙版

文章目录 一,简介二,背景减除法介绍三,算法实现:四,效果: 一,简介 在智能视频监控、人流量统计和运动检测等领域,背景减除法是一种常用的图像处理技术。本文将带您走进OpenCV的世界…...

安防监控/视频汇聚平台EasyCVR如何配置,实现默认获取设备的子码流?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构,兼容性强、支持多协议接入,包括国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SD…...

JavaScript基础——闭包

闭包简介 闭包的作用 闭包可以保留变量的状态 闭包可以让变量私有化 闭包的缺点 闭包简介 在JavaScript中,重复声明同一个变量会导致变量冲突,在这个时候可以使用闭包创建独立的执行环境。 在JavaScript中,闭包是指封闭的执行环境&#xff…...

Linux基础入门---安装vmware

😀前言 本篇博文是关于Linux基础入门和vmwarel5.5下载,希望你能够喜欢。 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动…...

用AppleScript点击无效,继续用pyautogui.click()

目标:点击下图中 CheckBox 元素 第一步:获取这个元素的位置,并打印出value,确认是开关是关的(value0)再继续 set targetbox to checkbox 1 of group 1 of scroll area 1 of scroll area 1 of group 1 of g…...

谈谈我用MemFire Cloud开发应用的这一两年

作为一个独立开发者,这两年我在应用开发的道路上经历了不少挑战和收获。而帮助我度过这些挑战、提高开发效率的“神器”之一,就是MemFire Cloud。如果你还没听说过这个工具,那么我今天就来和你分享一下我使用MemFire Cloud开发应用的经历&…...

AI安全-文生图

1 需求 2 接口 3 示例 大模型图像安全风险探析 - 先知社区 前言 文生图模型是一种新兴的人工智能技术,它通过对大规模文本数据的学习,能够生成逼真的图像。这种模型包含两个主要组件:一个文本编码器和一个图像生成器。 文本编码器接收文本输入,并将其转换为一种数字化的表示…...

Hibernate 使用详解

在现代的Java开发中,数据持久化是一个至关重要的环节。而在众多持久化框架中,Hibernate以其强大的功能和灵活性,成为了开发者们的首选工具。本文将详细介绍Hibernate的原理、实现过程以及其使用方法,希望能为广大开发者提供一些有…...

乐普医疗校招社招笔试/测评通关攻略、最新北森题库、可搜索答案

乐普医疗为什么要做笔试/测评? 笔试/测评是乐普医疗校招社招招聘流程中的必经环节,只有完成笔试/测评,候选人才有机会进入面试流程,同学们收到笔试测评通知后请尽快完成。我们给部分岗位安排了笔试,笔试的成绩对于面试官来说是很重要的参考依据,请同学们在笔试过程…...

uniapp在线下载安装包更新app

首先用getSystemInfo判断平台、 再通过json文件模拟接口 判断版本号是否一致 不一致则下载服务器apk进行更新 外加网络波动导致失败重新下载更新包 uni.getSystemInfo({success: function (e) {// #ifndef H5// 获取手机系统版本const system e.system.toLowerCase();const pl…...

Unity | AmplifyShaderEditor插件基础(第一集:简单了解ASE和初识)

前言 我本来老老实实的写着我的Shader,群里的小伙伴强烈建议我开始讲ASE,我只能说,我是一个听话的Up。 一、什么是ASE 全称AmplifyShaderEditor,是一个unity插件,存在于unity商城中,售价看他们心情。&am…...

Windows文件资源管理器未响应,磁盘状态正常,很可能是这个原因

最近使用电脑,老感觉性能吃力,就想着自己把一些自动和延迟启动的服务给关掉一些,结果不小心把Work Folders给关闭了。于是,文件资源管理器能正常打开窗口,但是去点击磁盘或者去打开近期访问文件夹,它就会一…...

良好的代码习惯

虽然我们大家都知道这个道理,但能长期坚持下来的并不多。 在多年的项目开发过程中,遇到了各型各色的程序员,有技术一流的,有速度一流的,当然也有bug不断的,但真正能做到养成良好代码习惯并不多&#xff0c…...

音乐生成模型应用

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

DBEUG:二维图尺寸没思路

问题 标注总是不对 解决 关注孔(螺纹 沉头 通孔 标注清楚)关注孔的定位(同心圆 靠边定位)0.02一定打开三维图 看装配关系过盈 还是 查公差表可以min max限制装配公差一定要有意义部分宽度变化大的加平行修改的rev改成1 方框1表…...

【图像去雾系列】使用SSR/MSR/MSRCR/MSRCP/automatedMSRCR算法对单图像进行图像增强,达到去雾效果

目录 一 图像去雾算法概述 二 SSR/MSR/MSRCR算法 三 实践 一 图像去雾算法概述 近些年来,出现了众多的单幅图像去雾算法,其主要可以分为 3 类:基于图像增强的去雾算法、基于图像复原的去雾算法和基于 CNN 的去雾算法。 ▲基于图像增强的去雾算法 通过图像增强技术突出图…...