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


没有问题!


相关文章
|
2天前
|
算法 搜索推荐 程序员
第六十五练 字符串匹配 - Rabin-Karp算法
第六十五练 字符串匹配 - Rabin-Karp算法
5 1
|
2天前
|
算法 搜索推荐 程序员
第六十四练 字符串匹配 - Boyer-Moore算法
第六十四练 字符串匹配 - Boyer-Moore算法
6 0
|
2天前
|
算法 搜索推荐 程序员
第六十三练 字符串匹配 - KMP算法
第六十三练 字符串匹配 - KMP算法
6 2
|
2天前
|
算法 C语言 人工智能
|
2天前
|
存储 算法 安全
【刷题】 leetcode 面试题 01.06 字符串压缩
来看效果: 非常好!!!过啦!!!
25 5
【刷题】 leetcode 面试题 01.06 字符串压缩
|
2天前
leetcode代码记录(删除字符串中的所有相邻重复项
leetcode代码记录(删除字符串中的所有相邻重复项
11 0
|
2天前
|
存储 算法
Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
给定一个无序整数数组和目标值,找出数组中和为目标值的两个数的下标。要求不重复且可按任意顺序返回。示例:输入nums = [2,7,11,15], target = 9,输出[0,1]。暴力解法时间复杂度O(n²),优化解法利用哈希表实现,时间复杂度O(n)。
22 0
|
2天前
|
算法
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
23 3
|
2天前
|
存储 算法
代码随想录算法训练营第五十九天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十九天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
22 1