前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >LeetCode 2047. 句子中的有效单词数

LeetCode 2047. 句子中的有效单词数

作者头像
Michael阿明
发布2022-01-07 11:09:32
发布2022-01-07 11:09:32
68800
代码可运行
举报
运行总次数:0
代码可运行

文章目录

1. 题目

句子仅由小写字母('a' 到 'z')、数字('0' 到 '9')、连字符('-')、标点符号('!'、'.' 和 ',')以及空格(' ')组成。 每个句子可以根据空格分解成 一个或者多个 token ,这些 token 之间由一个或者多个空格 ’ ’ 分隔。

如果一个 token 同时满足下述条件,则认为这个 token 是一个有效单词:

  • 仅由小写字母、连字符和/或标点(不含数字)。
  • 至多一个 连字符 '-' 。如果存在,连字符两侧应当都存在小写字母("a-b" 是一个有效单词,但 "-ab""ab-" 不是有效单词)。
  • 至多一个 标点符号。如果存在,标点符号应当位于 token 的 末尾

这里给出几个有效单词的例子:“a-b.”、“afad”、“ba-c”、“a!” 和 “!” 。

给你一个字符串 sentence ,请你找出并返回 sentence 中 有效单词的数目 。

代码语言:javascript
代码运行次数:0
运行
复制
示例 1:
输入:sentence = "cat and  dog"
输出:3
解释:句子中的有效单词是 "cat"、"and" 和 "dog"

示例 2:
输入:sentence = "!this  1-s b8d!"
输出:0
解释:句子中没有有效单词
"!this" 不是有效单词,因为它以一个标点开头
"1-s" 和 "b8d" 也不是有效单词,因为它们都包含数字

示例 3:
输入:sentence = "alice and  bob are playing stone-game10"
输出:5
解释:句子中的有效单词是 "alice"、"and"、"bob"、"are" 和 "playing"
"stone-game10" 不是有效单词,因为它含有数字

示例 4:
输入:sentence = "he bought 2 pencils, 3 erasers, and 1  pencil-sharpener."
输出:6
解释:句子中的有效单词是 "he"、"bought"、"pencils,"、"erasers,"、"and" 和 "pencil-sharpener."
 
提示:
1 <= sentence.length <= 1000
sentence 由小写英文字母、数字(0-9)、以及字符(' '、'-'、'!'、'.' 和 ',')组成
句子中至少有 1 个 token

https://leetcode-cn.com/problems/number-of-valid-words-in-a-sentence/

2. 解题

代码语言:javascript
代码运行次数:0
运行
复制
class Solution:
    def countValidWords(self, sentence: str) -> int:
        sym = ['!', '.', ',']
        def valid(x):
            if len(x) == 0:
                return False
            if any(c.isdigit() for c in x):
                return False # 有数字
            ct = x.count('-')
            if ct > 1 or x[0]=='-' or x[-1]=='-':
                return False # 连字符在首尾,个数>1
            if ct == 1:
                p = x.find('-')
                if not x[p-1].isalpha() or not x[p+1].isalpha():
                    return False # 连字符两侧不为字母
            ct = 0
            for c in x:
                if c in sym:
                    ct += 1
                    if ct > 1:
                        return False # 标点符号数量 > 1
            if ct == 1 and x[-1] not in sym:
                return False # 标点符号存在,且不在末尾
            return True
        return len([x for x in sentence.split(' ') if valid(x)])

56 ms 15.2 MB Python3

我的CSDN博客地址 https://michael.blog.csdn.net/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/10/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档