JS刷LeetCode |第12天 | 单词的最后一个长度
2023-11-14 17:21:34
使用 JavaScript 巧解 LeetCode 题目:查找字符串中最后一个单词的长度
简介
LeetCode 是一处宝贵的在线编程乐园,提供海量优质编程难题,助力程序员们精进编程技能与算法思维。为了助你一臂之力,笔者将定期撰写博文,分享使用 JavaScript 解决 LeetCode 题目的心得体会,期冀能助你开拓编程之旅。
题目分析
本次我们聚焦的题目是:给定一个仅包含大小写字母和空格字符的字符串,求其最后一个单词的长度。若字符串从左向右滚动显示,则最后一个单词即为最后出现的单词。倘若不存在最后一个单词,则返回 0。
解题思路
要解开此题,我们可以分步而行:
- 移除字符串末尾的空格 :这是为防止多余空格干扰我们查找单词长度。
- 从字符串末尾开始查找 :寻觅第一个非空格字符。
- 继续向前查找 :直至遇到第一个空格字符或字符串开头,同时记录遍历过的字符数。
- 返回字符数 :即可得到最后一个单词的长度。
JavaScript 代码
/**
* 给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度。
* 如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。
* 如果不存在最后一个单词,请返回 0 。
*
* @param {string} s
* @return {number}
*/
const lengthOfLastWord = (s) => {
// 移除字符串末尾的空格
s = s.trim();
// 若字符串为空,则返回 0
if (s.length === 0) {
return 0;
}
// 从字符串末尾开始查找
let i = s.length - 1;
while (i >= 0 && s[i] === ' ') {
i--;
}
// 若没有找到非空格字符,则返回 0
if (i < 0) {
return 0;
}
// 继续向前查找
let count = 0;
while (i >= 0 && s[i] !== ' ') {
count++;
i--;
}
// 返回字符数
return count;
};
复杂度分析
- 时间复杂度:O(n) ,其中 n 为字符串 s 的长度。
- 空间复杂度:O(1) ,因为我们没有使用额外的空间。
结语
通过本次 LeetCode 题目的解析,我们领悟了如何巧妙地利用 JavaScript 处理字符串,获取指定信息。LeetCode 是一片广袤的编程天地,蕴藏着海量题目,等待着我们去探索与征服。愿你也能在这条编程之路上披荆斩棘,不断提升自我!
常见问题解答
-
如何处理字符串中包含标点符号的情况?
本题目中未涉及标点符号,但若遇到包含标点符号的字符串,我们需要在分析前对标点符号进行适当处理,如将其替换为空格字符等。
-
若字符串中存在多个空格,该如何计算最后一个单词的长度?
我们的算法可以正确处理字符串中多个空格的情况。它会跳过所有尾部的空格,找到第一个非空格字符,再继续往前遍历直到遇到第一个空格字符或字符串开头。
-
如何优化算法以提高效率?
本算法已经具备较高的效率,但若字符串非常长,我们可以考虑使用正则表达式来提取最后一个单词,这可能比逐个字符遍历更有效率。
-
是否可以将算法拓展到处理其他类型的单词分隔符?
当然可以。我们可以通过修改代码中的空格字符判断逻辑,使其能够识别其他类型的单词分隔符,如连字符 (-) 或下划线 (_) 等。
-
有什么替代方法可以解决这个问题?
除了本文中的算法外,还有其他方法可以解决这个问题,例如使用字符串函数
split()
将字符串拆分为单词数组,然后获取最后一个单词的长度。