前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >菜鸟的每日力扣系列——2047. 句子中的有效单词数

菜鸟的每日力扣系列——2047. 句子中的有效单词数

作者头像
才浅Coding攻略
发布2022-12-12 17:40:31
3760
发布2022-12-12 17:40:31
举报
文章被收录于专栏:才浅coding攻略

力扣2047. 句子中的有效单词数

如果一个单词是有效单词它需要满足"[a-z]-[a-z]"这样的格式,由小写字母组成、至多在中间有一个连字符、至多有一个'.,!'在末尾、单词间用' '分开。这样的格式可以使用正则表达式表示出来,常用的正则匹配规则如下:

  • (str)*: 出现若干次(str);
  • (str)+: 出现至少一次(str);
  • (str)?: 至多出现一次(str);
  • ^(str): 以(str)开头;
  • (str)$: 以(str)结尾;
  • [str]: 出现str中的某个字符;
  • [a - z]: a - z中的任意一个字符
代码语言:javascript
复制
import re
def re_solution(sentence: str) -> int:
    return sum(bool(re.match("^[a-z]*([a-z]-[a-z])?[a-z]*[.!,]?$", word)) for word in sentence.split() if word)

再来用模拟逻辑的方法实现:首先指定一个标志位flag,记录'-'是否出现过,默认为False,如果连字符出现则置为True;遍历sentence字符串,如果包含数字或者在非末尾处出现'.,!'则表明该单词无效;再来看遇到连字符的情况,如果连字符已经出现过(flag=True)或者连字符出现在开头或末尾处,又或者连字符连接的左/右端不止有小写字母,以上的所有情况均构不成有效单词。

将上述判断的结果用bool值返回,并统计为True即1的个数,就是最终结果有效单词数。

代码语言:javascript
复制
def countValidWords(sentence: str) -> int:
    def helper(word) -> bool:
        flag = False
        n = len(word)
        for i, c in enumerate(word):
            if c.isdigit() or (c in "!.," and i < n -1):
                return False
            if c == '-':
                if flag or i == 0 or i == n - 1 or not word[i-1].islower() or not word[i+1].islower():
                    return False
                flag = True
        return True
    return sum(helper(word) for word in sentence.split() if word)

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 才浅coding攻略 微信公众号,前往查看

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

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

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