携手创作,共同成长!这是我参与「掘金日新计划 · 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)