LC2047有效单词个数:字符串模拟

前言

  • 大家好,我是新人简书博主:「 个人主页」主要分享程序员生活、编程技术、* * 以及每日的LeetCode刷题记录,欢迎大家关注我,一起学习交流,谢谢!
  • 正在坚持每日更新LeetCode每日一题,发布的题解有些会参考其他大佬的思路(参考资料的链接会放在最下面),欢迎大家关注我 ~ ~ ~
  • 同时也在进行其他专项类型题目的刷题与题解活动,相关资料也会同步到「GitHub」上面 ~
  • 今天是坚持写题解的31天(haha,从21年圣诞节开始的),大家一起加油

  • 每日一题:LeetCode:2047.句子中的有效单词数
    • 时间:2022-01-27
    • 力扣难度:Easy
    • 个人难度:Easy
    • 数据结构:字符串
    • 算法:模拟、数学

LeetCode每日一题.jpg

2022-01-26:LeetCode:2047.句子中的有效单词数

1. 题目描述

  • 题目:原题链接

    • 句子仅由小写字母('a' 到 'z')、数字('0' 到 '9')、连字符('-')、标点符号('!'、'.' 和 ',')以及空格(' ')组成。
    • 每个句子可以根据空格分解成 一个或者多个 token ,这些 token 之间由一个或者多个空格 ' ' 分隔。
    • 如果一个 token 同时满足下述条件,则认为这个 token 是一个有效单词:
      • 仅由小写字母、连字符和/或标点(不含数字)。
      • 至多一个 连字符 '-' 。如果存在,连字符两侧应当都存在小写字母("a-b" 是一个有效单词,但 "-ab" 和 "ab-" 不是有效单词)。
      • 至多一个 标点符号。如果存在,标点符号应当位于 token 的 末尾 。
    • 这里给出几个有效单词的例子:"a-b."、"afad"、"ba-c"、"a!" 和 "!" 。
    • 给你一个字符串 sentence ,请你找出并返回 sentence 中 有效单词的数目。
    • 1 <= sentence.length <= 1000
    • 句子中至少有 1 个 token
  • 输入输出规范

    • 输入:句子字符串
    • 输出:有效单词个数
  • 输入输出示例

    • 输入:sentence = "cat and dog"
    • 输出:3

2. 方法一:模拟

  • 思路

    • 根据题意直接进行模拟
    • 单词无效对应以下几种情况
      • 单词中包含数字
      • 单词中包含两个以上连字符
      • 连字符在单词头部或者单词末尾
      • 连字符的左/右边字符不是小写字母
      • 单词中的标点符号不在单词的末尾
  • 题解

    public int countValidWords(String sentence) {
        if (sentence == null || sentence.length() == 0) return 0;
        int n = sentence.length();
        int count = 0;
        int left = 0, right = 0;
        while (true) {
            // 删除开头的空格
            while (left < n && sentence.charAt(left) == ' ') left++;
            if (left >= n) break;
            right = left + 1;
            // 找到单词
            while (right < n && sentence.charAt(right) != ' ') right++;
            if (isValid(sentence.substring(left, right))) count++;
            left = right + 1; // 去寻找下一个单词
        }
        return count;
    }
    
    private boolean isValid(String word) {
        int n = word.length();
        int hyphenCount = 0, markCount = 0;
        for (int i = 0; i < n; i++) {
            if (Character.isDigit(word.charAt(i))) return false;
            else if (word.charAt(i) == '-') {
                hyphenCount++;
                if (hyphenCount > 1 || i == 0 || i == n - 1
                    || !Character.isLetter(word.charAt(i - 1))
                    || !Character.isLetter(word.charAt(i + 1))) {
                    return false;
                }
            } else if (word.charAt(i) == '!' || word.charAt(i) == '.' || word.charAt(i) == ',') {
                markCount++;
                if (markCount > 1) return false;
                if (i != n - 1) return false;
            }
        }
        return true;
    }
    
  • 复杂度分析:n 是字符串的长度

    • 时间复杂度:O(n)
    • 空间复杂度:O(1)

最后

如果本文有所帮助的话,欢迎大家可以给个三连「点赞」&「收藏」&「关注」 ~ ~ ~
也希望大家有空的时候光临我的其他平台,上面会更新Java面经、八股文、刷题记录等等,欢迎大家光临交流,谢谢!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容