第34期:最后一个单词的长度(高频)
时间:2022-07-25
本文章向大家介绍第34期:最后一个单词的长度(高频),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
01、题目示例
这是一道简单题,只需要普通的遍历就可以完成。不过会遇到一些坑,如果不注意,还是挺容易出错的。
第58题:最后一个单词的长度 |
---|
给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。 |
示例:
输入: "Hello World"
输出: 5
说明: 一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。
02、题解分析
因为我们要获取的是最后一个单词的长度,不难想到可以从尾开始遍历。
题中的陷阱在于,结尾处仍然可能有空格。
所以一般的解题思路为,先去掉末尾的空格,然后从尾向前开始遍历,直到遇到第一个空格处结束。
但这里可以取一个巧,我们可以通过一个 count 来记数,从第一个不为空格的数开始记起。换句话说,如果末尾处为空格,此时 count 值为 0,可以直接略过。
实现代码如下:
//JAVA
class Solution {
public int lengthOfLastWord(String s) {
if(s == null || s.length() == 0) return 0;
int count = 0;
for(int i = s.length()-1; i >= 0; i--){
if(s.charAt(i) == ' '){
if(count == 0) continue;
break;
}
count++;
}
return count;
}
}
当然,并不是说我们不能直接用 API,来进行一些“机智”的解题,大不了就是被挂。
//java
class Solution {
public int lengthOfLastWord(String s) {
s = s.trim();
int start = s.lastIndexOf(" ") + 1;
return s.substring(start).length();
}
}
这个代码应该大家都能看懂,首先 trim 掉两边的空格,然后直接定位到最后一个单词的位置,将其截取下来获取长度。
额。既然我们 trim 都用了,那为什么我们不直接使用 split 得到最后一个单词的长度呢?
//java
public class Solution {
public int lengthOfLastWord(String s) {
String[] words = s.split(" ");
if (words.length < 1) return 0;
return words[words.length - 1].length();
}
}
03、函数学习
上面的题解中用到了 trim,那 trim 除了去除两边的空格,是否还会去除其他字符呢?一起来看下 trim 的源码。
//JAVA
public String trim() {
int len = value.length;
int st = 0;
char[] val = value; /* avoid getfield opcode */
while ((st < len) && (val[st] <= ' ')) {
st++;
}
while ((st < len) && (val[len - 1] <= ' ')) {
len--;
}
return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
}
可以看到,Java 中的 trim 函数除了去除空格之外,还去除了所有在 ASCII 码表中排行小于等于空格的字符。
空格在 ASCII 码表中排行是 32位,可以看到 tab,换行,回车等都在 trim 的控制范围内。
随意展示一张导图内容(所有的子节点都可以打开):
今日论点:
村上春树如何教新手写作?
- 输入:疯狂阅读,细心观察
- 素材:抽屉存放,钩子提取
- 修改:反复修改,用心打磨
- 规律:持续写作,规律为王
- 体力:忽略身体,难以持久
大家怎么看呢?评论区留下你的想法吧!
- nwui —— 又一个go语言图形界面解决方案
- 分享博客统计中的动态运行天数代码
- GO语言标准错误处理机制error用法实例
- go的websocket实现原理与用法详解
- 分享张戈博客的在线影音源代码
- go语言base64加密解密的方法
- Oracle 12c数据库优化器统计信息收集的最佳实践(一)
- Go语言轻量级线程Goroutine用法实例
- 仿异次元百度分享工具条张戈修改版
- Go语言的队列和堆栈实现方法
- 妹子你真萌:一次心惊肉跳的服务器误删文件的恢复过程
- Go语言使用sort包对任意类型元素的集合进行排序的方法
- Oracle 12c ASM专题|Flex Diskgroup相关概念
- 移动搜索SEO分享:利用Meta声明来做百度开放适配
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 嘘!高效快速的刷访问量(偷偷收藏)
- 进行JDBC操作时,连接参数的配置(附DBUtil工具类)
- JavaEE中,考勤(签到签退)功能的实现
- HTTP协议详解,浏览器和服务器交互过程详解
- 京东网页(动态)搭建,利用jquery实现
- 京东购物车(动态)网页搭建,利用JavaScript实现
- 你不知道的 TypeScript 泛型(万字长文,建议收藏)
- JavaScript中的函数、对象
- 京东购物车网页(静态)搭建
- MyBatis注解详解
- MyBatis完整环境搭建步骤
- JDBC常见操作总结
- Oracle数据中的序列、索引、视图、事务操作详解以及rowid 和 rownum的简单介绍
- Oracle子查询详解
- SQL92、SQL99中的多表连接查询区别