「这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战」。
描述
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
示例 1:
输入:s = "Hello World"
输出:5
示例 2:
输入:s = " fly me to the moon "
输出:4
示例 3:
输入:s = "luffy is still joyboy"
输出:6
做题
思路
因为这道题给出的字符串是由若干单词组成的,单词之间是有空格的。
这道题只能从后往前去遍历,当遇到一个空格的时候,就说明这个单词已经被我们遍历完了。
but,题目给出的示例中就有字符串的末尾也有空格的,所以我们要越过这些空格。
我们不需要把字符串转成一个 char 数组,只需要使用 String.charAt(index) 来获取当前的字符就可以了。
举例演示
s = "the moon ", index = 9;
首先,我们要越过后面的两个空格。
从右往左循环
s 的第 9 和 8 位字符都是空格,跳过。
index = 7,lastWordLength = 0;
'n' != ' ',index--,lastWordLength++;
index = 6,lastWordLength = 1;
'o' != ' ',index--,lastWordLength++;
index = 5,lastWordLength = 2;
'o' != ' ',index--,lastWordLength++;
index = 4,lastWordLength = 3;
'm' != ' ',index--,lastWordLength++;
index = 3,lastWordLength = 4;
接下来一位就是空格了,所以最后一个单词的长度为 4。
运行的代码
public int lengthOfLastWord(String s) {
int r = s.length() - 1;
//因为有字符串末尾有空格的情况,所以这里先去除掉末尾的空格
while(s.charAt(r) == ' '){
// 从末尾开始,遇到空格就跳过
r--;
}
// 这时的 r 就是我们要开始判断最后一个单词长度的起点
int lastWordLength = 0;
while(r >= 0 && s.charAt(r--) != ' '){
lastWordLength++;
}
return lastWordLength;
}
踩过的坑
我做这道题时,没有踩过坑,我相信各位小伙伴也是一遍过的吧,没有遇到什么奇奇怪怪的坑。
最后
今天就到这里了。
这里是程序员徐小白,【每日算法】是我新开的一个专栏,在这里主要记录我学习算法的日常,也希望我能够坚持每日学习算法,不知道这样的文章风格您是否喜欢,不要吝啬您免费的赞,您的点赞、收藏以及评论都是我下班后坚持更文的动力。