题目

给你一个字符串 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 中至少存在一个单词

解法

因为输入字符串仅由字母和空格组成,所以抛开空格剩下的就是单词,

所以遇见非空格表示是一个字母,长度+1。

遇到空格表示一个单词结束,把有效长度记录到结果数组中。

也要注意最后一个单词可能没有空格,所以最后要手动把长度再记录一次,反正有没有空格,最后一个的长度一定是准的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <string>
#include <vector>
using namespace std;
class Solution {
public:
int lengthOfLastWord(string s) {
vector<int> rets;
int ret = 0;
for (auto c : s)
{
if (c == ' ')
{
if (ret > 0)
rets.push_back(ret);
ret = 0;
}else
ret++;
}
if (ret > 0)
rets.push_back(ret);
return rets.back();

}
};

也要考虑像是下面这种恶心人的输入:

1
'  fly my to the moon  '