题目难度:简单
默认优化目标:最小化平均时间复杂度。
Python默认为Python3。
目录
1 题目描述
给你一个字符串 s
,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
示例 1:
输入:s = "Hello World" 输出:5 解释:最后一个单词是“World”,长度为 5。
示例 2:
输入:s = " fly me to the moon " 输出:4 解释:最后一个单词是“moon”,长度为 4。
示例 3:
输入:s = "luffy is still joyboy" 输出:6 解释:最后一个单词是长度为 6 的“joyboy”。
提示:
-
1 <= s.length <= 104
-
s
仅有英文字母和空格' '
组成 -
s
中至少存在一个单词
2 题目解析
输入是一个字符串s
,输出是最后一个单词的长度length
。s
是一句句子,英文单词之间用空格分开。既然是求最后一个单词的长度,从后往前找比从前往后找更快。
3 算法原理及代码实现
3.1 反向遍历
我们在s
中从后往前遍历,第一个字符就是最后一个单词的最后一个字符。然后向前,直到遇到空格或者到达s
的首位置。遍历到的字符个数即为length
。
平均时间复杂度O(n),平均空间复杂度O(1)。
C++代码实现
class Solution {
public:
int lengthOfLastWord(string s) {
int n=s.size()-1;
int length=0;
while(s[n]==' '){
n--;
}
while(n>=0 && s[n]!=' '){
n--;
length++;
}
return length;
}
};
Python代码实现
class Solution:
def lengthOfLastWord(self, s: str) -> int:
n,length=len(s)-1,0
while s[n]==' ':
n-=1
while n>=0 and s[n]!=' ':
n-=1
length+=1
return length