58. 最后一个单词的长度

1. 题目

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

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 1 <= s.length <= 104
  • s 仅有英文字母和空格 ' ' 组成
  • s 中至少存在一个单词

2. 思路

  • 将字符串转化为字符数组,同时定义count变量作为结果数值

  • 定义needToReset变量,并遍历上述的字符数组

    • 当遇到空白符号时,标志needToResettrue,表示下次需要将计数器count变量重置为0

    • 当遇到的符号为字母时,首先检查是否needToReset标志位true,为true则需要将计数器count变量重置为0,否则则对计数器变量count进行+1操作

  • 最终返回该结果作为最后一个单词的长度

3. 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public int lengthOfLastWord(String s) {
var count = 0;
var ch = s.toCharArray();
var needToReset = false;

for (var i = 0; i < ch.length; ++i) {
if (ch[i] != ' ') {
if (needToReset) {
needToReset = false;
count = 0;
}
count++;
} else {
needToReset = true;
}
}

return count;
}
}

4. 复杂度

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

image-20230803190758001