LeetCode 434. 字符串中的单词数 | 算法-从菜鸟开始

简介: 算法,从承认自己是一个菜鸟开始!话不多说,让我们继续我们的算法之旅。

LeetCode 434. 字符串中的单词数


题目介绍:


统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。


请注意,你可以假定字符串里不包括任何不可打印的字符。


示例:


输入: "Hello, I Love JueJin!"
输出: 4
解释: 这里的单词是指连续的不是空格的字符,所以 "Hello,"、"JueJin!" 算作 1 个单词。


方案一:利用split、filter方法


将字符串s使用split方法进行分割,返回了包含单词和空字符的数组,再利用filter方法筛选出不是空字符的所有单词,返回对应的长度即可。


Up Code ~ 上码 ~


/**
 * @method countSegments1
 * @description: 使用split、filter方法
 * @param {string} s
 * @return {*}
 */
function countSegments1(s: string): number {
  if (s.length === 0) return 0;
  // 1. split分割 - 空格分割
  const sArr = s.split(' ');
  // 2. 筛除所有的空格
  const segments = sArr.filter((v) => v !== '');
  // 3. 返回单词长度
  return segments.length;
}


方法很简单,上功能测试~~~


console.log(countSegments1('Hello, I Love JueJin!')); // 4


没有问题!


方案二:遍历字符串s,按空格区分单词并计数


/**
 * @method countSegments2
 * @description: 循环遍历,按单词/空格计数
 * @param {string} s
 * @return {*}
 */
function countSegments2(s: string): number {
  // 获取字符串长度
  const sLen = s.length;
  // 临界点判断
  if (sLen === 0) return 0;
  // 定义一个单词临时变量
  let tmpWord = '';
  // 定义一个记录单词数量的变量
  let count = 0;
  // 1. 遍历字符串s
  for (let i = 0; i < sLen; i++) {
    // 2. 如果遇到的不是一个空格
    if (s[i] !== ' ') {
      // 是一个单词,累加
      tmpWord += s[i];
      // 特殊情况处理:判断是最后一个字符了
      if (i === sLen - 1) {
        count++;
      }
    } else {
      // 3. 判断是一个空格,此时要处理连续空格的情况
      if (tmpWord !== '') {
        // 有值,说明之前是一个单词,不是连续空格
        count++;
        // 重置单词
        tmpWord = '';
      }
    }
  }
  // 返回统计长度
  return count;
}


上功能测试~~~


console.log(countSegments2('Hello, I Love JueJin!')); // 4


没有问题!


相关文章
|
1月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
7月前
|
Go 索引
【LeetCode 热题100】394:字符串解码(详细解析)(Go语言版)
本文详细解析了 LeetCode 热题 394:字符串解码。题目要求对编码字符串如 `k[encoded_string]` 进行解码,其中 `encoded_string` 需重复 `k` 次。文章提供了两种解法:使用栈模拟和递归 DFS,并附有 Go 语言实现代码。栈解法通过数字栈与字符串栈记录状态,适合迭代;递归解法则利用函数调用处理嵌套结构,代码更简洁。两者时间复杂度均为 O(n),但递归需注意栈深度问题。文章还总结了解题注意事项及适用场景,帮助读者更好地掌握字符串嵌套解析技巧。
188 6
|
8月前
|
存储 机器学习/深度学习 缓存
🚀 力扣热题 394:字符串解码(详细解析)(Go语言版)
文章提供了两种解法:栈结构和递归解法。栈解法通过维护数字栈与字符串栈,依次处理 `[` 和 `]`,构造解码结果;递归解法则利用函数调用逐层解析嵌套结构。两者时间复杂度均为 $O(n)$,空间复杂度也为 $O(n)$。栈解法直观易懂,适合初学者;递归解法优雅简洁,适合处理深度嵌套规则。掌握这两种方法,可灵活应对类似问题,提升解题能力。
270 11
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
273 4
|
C++
Leetcode第43题(字符串相乘)
本篇介绍了一种用C++实现的字符串表示的非负整数相乘的方法,通过逆向编号字符串,将乘法运算转化为二维数组的累加过程,最后处理进位并转换为字符串结果,解决了两个大数相乘的问题。
113 9
|
JavaScript
力扣3333.找到初始输入字符串Ⅱ
【10月更文挑战第9天】力扣3333.找到初始输入字符串Ⅱ
150 1
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
151 2
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
164 0
Leetcode(最后一个单词长度)
这篇文章介绍了两种解决LeetCode第58题的方法,即计算给定字符串中最后一个单词的长度,方法包括翻转字符串和逆向遍历统计。
92 0
【LeetCode 22】459.重复的子字符串
【LeetCode 22】459.重复的子字符串
127 0

热门文章

最新文章