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

              • 相关阅读:
                LeetCode【1. 两数之和】
                华为fusionInsigtht集群es连接工具
                Gradle 新建项目及Gradle常用命令&镜像源修改
                通过postgres_fdw实现跨库访问
                Python教程——配置环境,再探IDE
                流水线作业
                通过WinSCP实现Windows给Ubuntu(Linux)虚拟机传输数据
                linux系统调用拦截Centos7.6(二)のSSH连接
                从链接器的角度详细分析g++报错: (.text+0x24): undefined reference to `main'
                Vue中路由的两大参数
              • 原文地址:https://blog.csdn.net/Tisfy/article/details/126884583
              • 最新文章
              • 【FHE】我们如何实现同态加密推理(八):SiLU 的密文化——两条路径,和一个 8 字节的开关
                SQLcl 中 c/old/new 替换变量为何失效?先定位再替换
                不让模型写作文,直接从它脑子里读答案:Jev 决策在 .NET 的两条路线
                Halo插件:支持GitHub的图床附件策略
                电视投屏界的“一股清流”!SimpleTVCast 6.0.0-beta 抢先体验:无需TV端App,界面大换血!✨
                华三VXLAN集中式网关实战指南:Spine多活网关 + 双活接入(M-LAG)
                软件更好写之后口碑会更重要
                大 O、大 Omega、大 Theta 的区别,O(n) 复杂度是什么意思
                Java标签跳转:一个鲜为人知但却很实用的小技巧
                多智能体系统论文速读
              • 热门文章
              • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
                奉劝各位学弟学妹们,该打造你的技术影响力了!
                五年了,我在 CSDN 的两个一百万。
                Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
                面试官都震惊,你这网络基础可以啊!
                你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
                心情不好的时候,用 Python 画棵樱花树送给自己吧
                通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
                13 万字 C 语言从入门到精通保姆级教程2021 年版
                10行代码集2000张美女图,Python爬虫120例,再上征途
              小工具 小游戏
              Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

              京公网安备 11010502049817号