LeetCode - 434 - 字符串中的单词数(number-of-segments-in-a-string)

Create by jsliang on 2019-07-26 10:54:152019-07-26 11:24:26

一 目录

不折腾的前端,和咸鱼有什么区别

| 目录 | | --- | | 一 目录 | | 二 前言 | | 三 解题 | |  3.1 解法 - 暴力破解 1 | |  3.2 解法 - 暴力破解 2 |

二 前言

  • 难度:简单

  • 涉及知识:字符串

  • 题目地址:https://leetcode-cn.com/problems/number-of-segments-in-a-string/

  • 题目内容

统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。	
请注意,你可以假定字符串里不包括任何不可打印的字符。	
示例:	
输入: "Hello, my name is John"	
输出: 5

三 解题

小伙伴可以先自己在本地尝试解题,再回来看看 jsliang 的解题思路。

3.1 解法 - 暴力破解

  • 解题代码

var countSegments = function(s) {	
  s = s.split(' ');	
  let length = s.length;	
  s.forEach((item) => {	
    if (item === '') {	
      length--;	
    }	
  })	
  return length;	
};
  • 执行测试

  1. s: Hello,mynameisJohn

  2. return

5
  • LeetCode Submit

✔ Accepted	
  ✔ 26/26 cases passed (116 ms)	
  ✔ Your runtime beats 11.81 % of javascript submissions	
  ✔ Your memory usage beats 11.76 % of javascript submissions (33.9 MB)
  • 知识点

  1. split(): split() 方法使用指定的分隔符字符串将一个 String 对象分割成字符串数组,以将字符串分隔为子字符串,以确定每个拆分的位置。 split() 详细介绍

  2. forEach(): forEach() 方法对数组的每个元素执行一次提供的函数。 forEach() 详细介绍

  • 解题思路

首先,明确题意:

  1. 'Hello, my name is John' 返回 5。

  2. ' ' 返回 0。

然后,原本打算直接:

var countSegments = function(s) {	
  return s.split(' ').length;	
};

结果不满足条件 2,报错了。

所以,修改为:

var countSegments = function(s) {	
  s = s.split(' ');	
  let length = s.length;	
  s.forEach((item) => {	
    if (item === '') {	
      length--;	
    }	
  })	
  return length;	
};

即:我们先切割,再统计它的长度,遍历一次,如果发现里面存在 '' 空字符串,那么我们就将其长度减一。

最后,我们返回它的长度即可。

3.2 解法 - 暴力破解 2

  • 解题代码

var countSegments = function (s) {	
  let res = 0;	
  s.split(' ').map((val) => {	
    if (val !== '') {	
      res++;	
    }	
  })	
  return res;	
}
  • 执行测试

  1. s: Hello,mynameisJohn

  2. return

5
  • LeetCode Submit

✔ Accepted	
  ✔ 26/26 cases passed (84 ms)	
  ✔ Your runtime beats 48.03 % of javascript submissions	
  ✔ Your memory usage beats 42.65 % of javascript submissions (33.7 MB)
  • 知识点

  1. split(): split() 方法使用指定的分隔符字符串将一个 String 对象分割成字符串数组,以将字符串分隔为子字符串,以确定每个拆分的位置。 split() 详细介绍

  2. map():遍历数组, item 返回遍历项, index 返回当前索引。 map() 详细介绍

  • 解题思路

思路同 3.1,先将字符串切割成数组,然后遍历数组。

如果数组中的元素不是空格,那么就让元素 + 1,最终返回 res 即可。

  • 进一步思考

扩展题解 1:

var countSegments = function (s) {	
  let transfer = [	
      [0, 1],	
      [0, 1]	
    ],	
    state = 0,	
    count = 0;	
  s += " ";	
  for (let i = 0; i < s.length; ++i) {	
    let id = (s[i] != " ") | 0,	
      ns = transfer[state][id];	
    if (state > ns) count++;	
    state = ns;	
  }	
  return count;	
};

Submit 提交记录:

✔ Accepted	
  ✔ 26/26 cases passed (116 ms)	
  ✔ Your runtime beats 11.81 % of javascript submissions	
  ✔ Your memory usage beats 23.53 % of javascript submissions (33.8 MB)

扩展题解 2:

var countSegments = function (s) {	
  //去除前后空白符,用\s+任何Unicode空白符分割的数组	
  return (s.trim() === '') ? 0 : s.trim().split(/\s+/).length;	
};

Submit 提交记录:

✔ Accepted	
  ✔ 26/26 cases passed (88 ms)	
  ✔ Your runtime beats 38.58 % of javascript submissions	
  ✔ Your memory usage beats 35.29 % of javascript submissions (33.7 MB)

不折腾的前端,和咸鱼有什么区别!

640?wx_fmt=jpeg

jsliang 会每天更新一道 LeetCode 题解,从而帮助小伙伴们夯实原生 JS 基础,了解与学习算法与数据结构。

扫描上方二维码,关注 jsliang 的公众号,让我们一起折腾!

640?wx_fmt=png

jsliang 的文档库 由 梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值