码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • LeetCode 0290. 单词规律


    【LetMeFly】290.单词规律

    力扣题目链接:https://leetcode.cn/problems/word-pattern/

    给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。

    这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。

     

    示例1:

    输入: pattern = "abba"
    , str = "dog cat cat dog"
    输出: true

        示例 2:

        输入:pattern = "abba"
        , str = "dog cat cat fish"
        输出: false

            示例 3:

            输入: pattern = "aaaa"
            , str = "dog cat cat dog"
            输出: false

                 

                提示:

                • 1 <= pattern.length <= 300
                • pattern 只包含小写英文字母
                • 1 <= s.length <= 3000
                • s 只包含小写英文字母和 ' '
                • s 不包含 任何前导或尾随对空格
                • s 中每个单词都被 单个空格 分隔

                方法一:哈希表

                这道题题目描述挺含糊的。

                大概意思就是 p a t t e r n pattern pattern中的一个字母唯一对应 s s s中的一个单词。

                但是DT的是C++里没有split。

                因此C++选手需要手动模拟拆分字符串。

                用一个记录上一个单词的起始位置的前一个位置,用一个变量记录遍历到了第几个单词,用两个哈希表分别存放单词和字母的对应关系。

                每遍历到一个单词,就看是否和字母一一对应。

                • 时间复杂度 O ( n ) O(n) O(n),其中 n n n是字符串长度
                • 空间复杂度 O ( n ) O(n) O(n)

                AC代码

                C++
                class Solution {
                public:
                    bool wordPattern(string& pattern, string& s) {
                        unordered_map<char, string> c2s;
                        unordered_map<string, char> s2c;
                        int th = 0;
                        int lastBegin = -1;
                        s += ' ';
                        for (int i = 0; i < s.size(); i++) {
                            if (s[i] == ' ') {
                                string thisWord = s.substr(lastBegin + 1, i - lastBegin - 1);
                                lastBegin = i;
                                if (c2s.count(pattern[th])) {
                                    if (c2s[pattern[th]] != thisWord) {
                                        return false;
                                    }
                                }
                                else {
                                    c2s[pattern[th]] = thisWord;
                                }
                                if (s2c.count(thisWord)) {
                                    if (s2c[thisWord] != pattern[th]) {
                                        return false;
                                    }
                                }
                                else {
                                    s2c[thisWord] = pattern[th];
                                }
                                th++;
                            }
                        }
                        return th == pattern.size();
                    }
                };
                
                • 1
                • 2
                • 3
                • 4
                • 5
                • 6
                • 7
                • 8
                • 9
                • 10
                • 11
                • 12
                • 13
                • 14
                • 15
                • 16
                • 17
                • 18
                • 19
                • 20
                • 21
                • 22
                • 23
                • 24
                • 25
                • 26
                • 27
                • 28
                • 29
                • 30
                • 31
                • 32
                • 33
                • 34

                同步发文于CSDN,原创不易,转载请附上原文链接哦~
                Tisfy:https://letmefly.blog.csdn.net/article/details/126884583

              • 相关阅读:
                升讯威在线客服系统客服端英文界面的技术实现方法,客户落地巴西圣保罗
                ChiQA
                【PlasticSCM Could Edition】新版本云托管浅试 (与踩一些坑)
                产品端数据分析思维
                分享在大疆DJI(深圳总部)工作的日常和福利
                linux cat命令详解,作用,说明
                Zabbix Proxy实现跨机房分布式监控
                【React】React全家桶(十)Redux
                一文讲透为Power Automate for Desktop (PAD) 实现自定义模块 - 附完整代码
                【第20章】spring-validator
              • 原文地址:https://blog.csdn.net/Tisfy/article/details/126884583
              • 最新文章
              • 沪漂五周年了:我越来越迷茫了
                Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
                MySQL-Seconds_behind_master的精度误差
                [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
                AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
                Agent OS :五种驯服不确定性的范式
                PortSwigger SQL注入LAB11
                数据库即时编译JIT
                [Begin]AI Learn Data Day 0
                深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
              • 热门文章
              • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
                奉劝各位学弟学妹们,该打造你的技术影响力了!
                五年了,我在 CSDN 的两个一百万。
                Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
                面试官都震惊,你这网络基础可以啊!
                你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
                心情不好的时候,用 Python 画棵樱花树送给自己吧
                通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
                13 万字 C 语言从入门到精通保姆级教程2021 年版
                10行代码集2000张美女图,Python爬虫120例,再上征途
              小工具 小游戏
              Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

              京公网安备 11010502049817号