返回

JS刷LeetCode |第12天 | 单词的最后一个长度

前端

使用 JavaScript 巧解 LeetCode 题目:查找字符串中最后一个单词的长度

简介

LeetCode 是一处宝贵的在线编程乐园,提供海量优质编程难题,助力程序员们精进编程技能与算法思维。为了助你一臂之力,笔者将定期撰写博文,分享使用 JavaScript 解决 LeetCode 题目的心得体会,期冀能助你开拓编程之旅。

题目分析

本次我们聚焦的题目是:给定一个仅包含大小写字母和空格字符的字符串,求其最后一个单词的长度。若字符串从左向右滚动显示,则最后一个单词即为最后出现的单词。倘若不存在最后一个单词,则返回 0。

解题思路

要解开此题,我们可以分步而行:

  1. 移除字符串末尾的空格 :这是为防止多余空格干扰我们查找单词长度。
  2. 从字符串末尾开始查找 :寻觅第一个非空格字符。
  3. 继续向前查找 :直至遇到第一个空格字符或字符串开头,同时记录遍历过的字符数。
  4. 返回字符数 :即可得到最后一个单词的长度。

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 是一片广袤的编程天地,蕴藏着海量题目,等待着我们去探索与征服。愿你也能在这条编程之路上披荆斩棘,不断提升自我!

常见问题解答

  1. 如何处理字符串中包含标点符号的情况?

    本题目中未涉及标点符号,但若遇到包含标点符号的字符串,我们需要在分析前对标点符号进行适当处理,如将其替换为空格字符等。

  2. 若字符串中存在多个空格,该如何计算最后一个单词的长度?

    我们的算法可以正确处理字符串中多个空格的情况。它会跳过所有尾部的空格,找到第一个非空格字符,再继续往前遍历直到遇到第一个空格字符或字符串开头。

  3. 如何优化算法以提高效率?

    本算法已经具备较高的效率,但若字符串非常长,我们可以考虑使用正则表达式来提取最后一个单词,这可能比逐个字符遍历更有效率。

  4. 是否可以将算法拓展到处理其他类型的单词分隔符?

    当然可以。我们可以通过修改代码中的空格字符判断逻辑,使其能够识别其他类型的单词分隔符,如连字符 (-) 或下划线 (_) 等。

  5. 有什么替代方法可以解决这个问题?

    除了本文中的算法外,还有其他方法可以解决这个问题,例如使用字符串函数 split() 将字符串拆分为单词数组,然后获取最后一个单词的长度。