[Python]LeetCode 434. 字符串中的单词数(的3种解法)

426 阅读1分钟
统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。

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

示例:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-segments-in-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
  • 思路
此处有个坑,它的单词并不是我们认识的单词,比如"he,llo"也是单词,实际上他这里说的单词是非空字符串。
1. 用正则比较简单,直接匹配就好
2. 也可以用字符串的split方法
上面都是一行代码就能搞定的

3. 说下暴力破解的思路
   3.1 遍历字符串
   3.2 如果字符不是空格,且前面一个字符是空格,那么单词就多了一个。
   3.3 对于第一个元素,如果不是空格,单词也要加一。
  • 示例代码1
import re
class Solution:
    def countSegments(self, s: str) -> int:
        re_list = (re.findall(r'[^ ]+',s))
        #         re_list = (re.findall(r'[\S]+',s))  #还可以这么写
        return len(re_list)
  • 示例代码2
class Solution:
    def countSegments(self, s: str) -> int:
        return len(s.split())
  • 示例代码3
class Solution:
    def countSegments(self, s: str) -> int:
        result = 0
        for i,v in enumerate(s):
            if i==0:
                if v!=' ':
                    result = result+1
            else:
                if v!=' ' and s[i-1]==' ':
                    result = result+1
        return result
  • 执行效果:以后不贴了,看了半天,这个执行效果有的时候是骗人的,明明一样的代码,有的人就排到了前面去,难道还跟机器性能有关啊,真是无语,不应该返回服务端执行时间吗?