最后一个单词的长度
难度:
标签:
题目描述
给你一个字符串 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
中至少存在一个单词
代码结果
运行时间: 36 ms, 内存: 14.9 MB
/*
* 题目思路:
* 使用Java Stream API来解决该问题。
* 我们将字符串按空格分割为单词流,并过滤掉空字符串。
* 然后找到最后一个单词并返回其长度。
*/
import java.util.Arrays;
public class Solution {
public int lengthOfLastWord(String s) {
return Arrays.stream(s.split(" "))
.filter(word -> !word.isEmpty())
.reduce((first, second) -> second) // 获取最后一个单词
.map(String::length)
.orElse(0); // 返回最后一个单词的长度
}
}
解释
方法:
该题解的思路如下:首先使用 strip() 方法去除字符串两端的空格,然后从字符串的末尾开始向前遍历,记录非空格字符的个数,直到遇到空格或到达字符串的开头为止。最后返回记录的非空格字符个数即为最后一个单词的长度。
时间复杂度:
O(n)
空间复杂度:
O(1)
代码细节讲解
🦆
为什么在计算最后一个单词的长度之前,需要使用strip()方法去除字符串两端的空格?
▷🦆
如果字符串s的结尾不是空格,而是直接结束于一个单词,这种情况下算法的逻辑是否有所不同?
▷🦆
在while循环中,使用了条件i >= 0和s[i] != ' ',这种条件的设置是否能有效处理字符串开头即是单词的情况?
▷🦆
请问在遍历字符串时,从末尾开始向前遍历与从前向后遍历在处理这个问题上有什么不同的优势?
▷