码农知识堂 - 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

              • 相关阅读:
                对话吴纲:我为什么笃信“大国品牌”的崛起?
                执法装备管理系统DW-S304的概念与特点
                [附源码]java毕业设计高校疫情日报管理信息系统
                提高效率 Or 增加成本,开发人员应如何理解结对编程?
                Java使用Redis的几种客户端介绍
                React TreeSelect设置默认展开项的方法
                SecureFX[po破] for Mac FTP/SSH传输工具[解] 安装教程
                STM32使用寄存器开发底层驱动学习(USART+DMA)
                52.【bool类型输入任何非0数值不为1的版本原因】
                华为9年经验的软件测试总监工作感悟—写给还在迷茫的朋友
              • 原文地址:https://blog.csdn.net/Tisfy/article/details/126884583
              • 最新文章
              • 攻防演习之三天拿下官网站群
                数据安全治理学习——前期安全规划和安全管理体系建设
                企业安全 | 企业内一次钓鱼演练准备过程
                内网渗透测试 | Kerberos协议及其部分攻击手法
                0day的产生 | 不懂代码的"代码审计"
                安装scrcpy-client模块av模块异常,环境问题解决方案
                leetcode hot100【LeetCode 279. 完全平方数】java实现
                OpenWrt下安装Mosquitto
                AnatoMask论文汇总
                【AI日记】24.11.01 LangChain、openai api和github copilot
              • 热门文章
              • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
                奉劝各位学弟学妹们,该打造你的技术影响力了!
                五年了,我在 CSDN 的两个一百万。
                Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
                面试官都震惊,你这网络基础可以啊!
                你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
                心情不好的时候,用 Python 画棵樱花树送给自己吧
                通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
                13 万字 C 语言从入门到精通保姆级教程2021 年版
                10行代码集2000张美女图,Python爬虫120例,再上征途
              Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
              正则表达式工具 cron表达式工具 密码生成工具

              京公网安备 11010502049817号