19.最后一个单词的长度
题目
给你一个字符串 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 中至少存在一个单词
思路
从最后一个字母开始往前遍历,并开始计数,找到第一个空格的时候停止。要注意没有空格的情况,例如"ab",应该返回2。
class Solution {
public int lengthOfLastWord(String s) {
int end = s.length() - 1;
while(end >= 0 && s.charAt(end) == ' ') end--;
if(end < 0) return 0;
int start = end;
while(start >= 0 && s.charAt(start) != ' ') start--;
return end - start;
}
}
class Solution:
def lengthOfLastWord(self, s: str) -> int:
length = 0
for i in reversed(range(len(s.rstrip()))):
if s.rstrip()[i] == " ":
return length
else:
length += 1
return length
class Solution {
fun lengthOfLastWord(s: String): Int {
var last = s.length - 1
while (last >= 0 && s[last] == ' ') {
// 到最后一个非空字符上
last --
}
var length = 0
while (last >= 0 && s[last] != ' ') {
// 继续往前找到不是空格的字符,并记录长度
length ++
last --
}
return length
}
}
复杂度分析:
-
时间复杂度:O(n),其中 n 是字符串的长度。最多需要反向遍历字符串一次。
-
空间复杂度:O(1)。
- 邮箱 :charon.chui@gmail.com
- Good Luck!