58. 最后一个单词的长度
题目描述
给定一个仅包含大小写字母和空格 ' '
的字符串 s
,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。
如果不存在最后一个单词,请返回 0 。
说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。
示例:
输入: "Hello World"
输出: 5
题解:
法一:
正向遍历。
使用两个变量,pre
表示前一个单词的长度(已遍历完),now
表示当前单词的长度(未遍历完),从前往后遍历 s
:
- 若
s[i]
是字母,now += 1
- 否则的话,如果
now
大于0
,说明已经遍历完一个单词,将now
赋值给pre
,并将now
置为0
法一代码:
class Solution {
public:
int lengthOfLastWord(string s) {
int pre = 0, now = 0;
for ( auto& it : s ) {
if ( it == ' ' ) {
if ( now ) pre = now, now = 0;
} else ++now;
}
if ( now ) pre = now;
return pre;
}
};
/*
时间:0ms,击败:100.00%
内存:6.4MB,击败:92.11%
*/
法二:
反向遍历。
从 s
末尾开始,首先过滤掉所有的空格,然后第一个连续的字母组成的子串就是最后一个单词。
法二代码:
class Solution {
public:
int lengthOfLastWord(string s) {
int k = s.length() - 1;
while ( k >= 0 && s[k] == ' ' ) --k;
if ( k < 0 ) return 0;
int r = k;
while ( k >= 0 && s[k] != ' ' ) --k;
return r - k;
}
};
/*
时间:0ms,击败:100.00%
内存:6.2MB,击败:100.00%
*/