(1条消息) 这题不会!面壁思过,换行吧!

今天是小浩算法 “365刷题计划” 第107天。满血,复活!

即日起,我们从这个题目开始,把 leetcode 前 200 道题,还没有讲过的,全部讲一遍。

暂定的目标是一周 3-5 篇题解。希望大家支持!一起进步!奥利给!

进刷题群的小伙伴

关注回复【进群】即可

01

PART

最后一个单词的长度

这是一道简单题,只需要普通的遍历就可以完成。不过会遇到一些坑,如果不注意,还是挺容易出错的。

最后一个单词的长度:给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。

输入: "Hello World"

输出: 5

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

02

PART

题解分析

因为我们要获取的是最后一个单词的长度,不难想到可以从尾开始遍历。

题中的陷阱在于,结尾处仍然可能有空格

所以一般的解题思路为,先去掉末尾的空格,然后从尾向前开始遍历,直到遇到第一个空格处结束。

但这里可以取一个巧,我们可以通过一个 count 来记数,从第一个不为空格的数开始记起。换句话说,如果末尾处为空格,此时 count 值为 0,可以直接略过。

//JAVAclass 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,来进行一些“机智”的解题,大不了就是被挂。

//JAVAclass Solution {    public int lengthOfLastWord(String s) {        s = s.trim();        int start = s.lastIndexOf(" ") + 1;        return s.substring(start).length();    }}

这个代码应该大家都能看懂,首先 trim 掉两边的空格,然后直接定位到最后一个单词的位置,将其截取下来获取长度。

额。既然我们 trim 都用了,那为什么我们不直接使用 split 得到最后一个单词的长度呢?

//JAVApublic class Solution {    public int lengthOfLastWord(String s) {        String[] words = s.split(" ");        if (words.length < 1) return 0;        return words[words.length - 1].length();    }}

03

PART

函数学习

上面的题解中用到了 trim,那 trim 除了去除两边的空格,是否还会去除其他字符呢?一起来看下 trim 的源码。

//JAVApublic 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 的控制范围内。

(0)

相关推荐

  • 用rept函数拆分数据就是好用

    观察一下可以发现原数据的特点,都是以相同的分隔符(~)连接的.这让我想到了以前的拆分方式,以~为分隔符进行拆分,提取拆分后的每个值,就和分列的效果一样.效果图如下: 它的拆分公式为=TRIM(MID( ...

  • 一个案例学会了10个常用文本函数,结合实际学的快!

    商品编码规则类别+_+3位编号,现在我们要提取类别,可以使用LEFT函数处理 =LEFT(A2,2) LEFT函数: 1.语法:LEFT(文本,[从左边截取的长度]) 2.说明:截取长度可以不写,默认 ...

  • ​LeetCode刷题实战186:翻转字符串里的单词 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • httprunner 3.x学习18 - validate 断言总结

    前言 httprunner 3.x使用 validate 方法断言 comparator 校验方式 validate 可以支持的校验方式 comparator 缩写 功能 equal "eq ...

  • (1条消息) 跳槽必刷算法题系列(一)

    今天是小浩算法 "365刷题" 第104天 问:程序员最讨厌康熙的哪个儿子. 答:胤禩. 01 PART 搜索二维矩阵 这道题目非常的高频!看起来是在考察矩阵搜索,其实和矩阵一点关 ...

  • (1条消息) 万字长文!二叉树入门和刷题看这篇就够了!

    今天是小浩算法 "365刷题计划" 二叉树入门 - 整合篇.本篇作为入门整合篇,已经砍去难度较大的知识点,所有列出的内容,均为必须掌握.因为很长,写下目录: 二叉树是啥 二叉树的最 ...

  • (100条消息) sql语句练习50题(Mysql版)

    习题来源于网络,sql语句是自己写的,部分有参考.欢迎指正. 2019.3.29更新 写完后一年没有看过,没想到这篇文章有这么多人点击.博主工作到一半去考研了,目前已上岸某中部985,也算是比较幸运. ...

  • (7条消息) C++中位运算的使用方法

    一:简介1 位逻辑运算符:& (位   "与")  and^  (位   "异或")|   (位    "或")   or~  (位 ...

  • (35条消息) 中国城域网路由情况介绍

    中国的城域网,大概有三张比较典型的,一个是中国移动的CMnet,一个是中国电信IP城域网,还有一个是中国网通IP城域网.作为接入最后的阵地,城域网的业务是最复杂的.含盖了IPTV,语音,Interne ...

  • (35条消息) 家用宽带网络与服务器使用的网络有什么不同?

    很多人都知道,服务器的网络跟家用网络有很多区别.其中有很多技术大牛,都是使用家里的宽带做很多别人使用公网服务器才能完成的服务. 但是对于普通人来讲,似乎都觉得没什么区别,本文就此简单做一下区分: 固定 ...

  • 怎么设置微信公众号添加关注后自动回复多条消息

    怎么设置微信公众号添加关注后自动回复多条消息

  • (40条消息) 5G网络(接入网+承载网+核心网)

    前一段时间自己一直在做某市的5G试点项目,对5G的无线接入网相关技术有了更深入的认识.因此,希望通过无线接入网为线索(行话叫锚点),帮大家梳理一下无线侧接入网+承载网+核心网的架构,这里以接入网为主, ...

  • (7条消息) 国家信息化体系六要素

    历史的温度:寻找历史背面的故事.热血和真性情作者:张玮出版社:中信出版集团股份有限公司好评:100% 销售量:0 ¥34.3 历史的温度2:细节里的故事.彷徨和信念作者:张玮出版社:中信出版集团股份有 ...