434. 字符串中的单词数

104 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情

一、题目描述:

434. 字符串中的单词数 - 力扣(LeetCode) (leetcode-cn.com)

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

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

示例:

输入: "Hello, my name is John"
输出: 5
解释: 这里的单词是指连续的不是空格的字符,所以 "Hello," 算作 1 个单词。

二、思路分析:

刚开始考虑得太简单,直接用split(‘ ’)来切分字符串,然后就出来了" ","",", , , a, bcdef"这些奇葩的字符串。我承认我还太年轻。
于是就要考虑特殊字符串的处理,无非就是前后有空格干扰的,中间多出来多个空格的。所以用空格直接暴力切分字符串就显得很苍白了。
于是就做了些预处理,先将首尾无效的字符串用strip直接去掉,剩下的空格都在字符串中间了。然后就是对付单词中间多个空格的问题,用遍历势必会增加运行时间,直接被否。
这里就考虑用强大的正则表达式判断,只要是空格就把他找出来,连续空格算一个,也就是说' '和' '都算是列表中一个元素,那么问题就变得很简单了,有几处空格(不管几个空格,只要是连续的就是一处),就有n+1个单词。

三、AC 代码:

class Solution(object):
    def countSegments(self, s):
        """
        :type s: str
        :rtype: int
        """
        import re
        s = s.strip()
        if s == "":
            return 0
        else:
            klist = re.findall(r'\s+',s)
            n = len(klist)+1
            return n

范文参考:

😄 Split 切分或者直接遍历计数,Python3、Java、C++、Golang 四种编程语言实现! - 字符串中的单词数 - 力扣(LeetCode)

【微扰理论】先读取连续的空格 再 读取连续的非空格 - 字符串中的单词数 - 力扣(LeetCode)