返回

数据结构与算法:JavaScript 解决 LeetCode 字符串单词个数

前端

在编程的世界中,数据结构和算法是必不可少的基石。它们是解决各种复杂问题的关键,也是提升编程能力的必经之路。今天,我们将一起使用 JavaScript 来解决一个经典的 LeetCode 问题——字符串单词个数。

问题

给定一个字符串,请计算出其中单词的个数。单词被定义为连续的字母序列,不包含任何空格。

示例:

输入:hello world
输出:2

输入:leetcode
输出:1

算法实现:

为了解决这个问题,我们可以使用 JavaScript 的内置函数 split() 来将字符串拆分成单词。然后,我们可以使用 length 属性来计算单词的个数。以下是如何实现这一算法的步骤:

  1. 使用 split() 函数将字符串拆分成单词,将结果存储在 words 数组中。
  2. 使用 length 属性计算 words 数组的长度,即可得到单词的个数。

以下是如何使用 JavaScript 实现这一算法的代码示例:

/**
 * 计算字符串中单词的个数
 *
 * @param {string} str 输入字符串
 * @returns {number} 单词个数
 */
const countWords = (str) => {
  // 使用 split() 函数将字符串拆分成单词
  const words = str.split(' ');

  // 使用 length 属性计算单词的个数
  return words.length;
};

// 测试代码
console.log(countWords('hello world')); // 输出:2
console.log(countWords('leetcode')); // 输出:1

时间复杂度:

该算法的时间复杂度为 O(n),其中 n 是字符串的长度。这是因为 split() 函数的时间复杂度为 O(n),而 length 属性的访问时间复杂度为 O(1)。

空间复杂度:

该算法的空间复杂度为 O(n),这是因为 split() 函数会创建一个新的数组来存储单词。

优化:

如果字符串中不存在连续的空格,我们可以使用正则表达式来更有效地拆分字符串。以下是如何使用正则表达式实现这一算法的代码示例:

/**
 * 计算字符串中单词的个数
 *
 * @param {string} str 输入字符串
 * @returns {number} 单词个数
 */
const countWords = (str) => {
  // 使用正则表达式拆分字符串
  const words = str.split(/\s+/);

  // 使用 length 属性计算单词的个数
  return words.length;
};

// 测试代码
console.log(countWords('hello world')); // 输出:2
console.log(countWords('leetcode')); // 输出:1

这种方法的时间复杂度和空间复杂度与上述方法相同,但对于没有连续空格的字符串来说,它更加高效。

总结:

通过本文,我们学习了如何使用 JavaScript 解决 LeetCode 上的字符串单词个数问题。我们介绍了两种不同的实现方法,并分析了它们的复杂度。希望这篇文章能帮助您加深对数据结构和算法的理解,并提升您的编程技能。