稀碎从零算法笔记Day21-LeetCode:单词规律

题型:哈希表、字符串

链接:290. 单词规律 - 力扣(LeetCode)

来源:LeetCode

题目描述

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

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

题目样例

示例1:

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

示例 2:

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

示例 3:

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

提示:

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

题目思路

之前做过一个 字母映射字母的题目,用的是两个 unordered_map<char,char>。这里可以模仿一下——两个unordered_map,但是一个是<string,char>,以为string映射到char,另一个相反<char,string>。

思路就是遍历模式串,没遍历一个字母的时候,就从字符串s截取一个单词(单词截取思路可以是双指针,然后创一个string存起来),截完后可以看下两个无序图中有无键值对,有的话看一下是否一一对应,不对应的话就可以直接return 0,对应或者没有的话就更新两个无序图

C++代码

class Solution {
public:
    bool wordPattern(string pattern, string s) {
        // 映射:两个哈希表,实现 单词 - 字符间的一一对应
        // ① 提取单词   ②单词和字符映射
        unordered_map<char,string> c2s;
        unordered_map<string,char> s2c;
        int lenp=pattern.length(),lens=s.length();
        int i=0;
        int begin=0,end=0;
        while(i < lenp)
        {
            if(begin >= lens)
                return 0;
            while(end < lens && s[end] != ' ' )
                end++;
            string temp = s.substr(begin,end-begin);
            char temp_ch = pattern[i];
            // 映射失败:字符 和 单词不对应
            if((c2s.count(temp_ch) && c2s[temp_ch] != temp) || (s2c.count(temp) && s2c[temp] != temp_ch))
                return 0;
            c2s[temp_ch] = temp;
            s2c[temp] = temp_ch;
           
           begin = end+1;
           end=begin;
           i++;
           
        }
        return begin == lens+1;
    }
};

结算页面

相关推荐

  1. 算法笔记Day40-LeetCode:加油站

    2024-03-19 23:42:03       41 阅读
  2. 算法笔记Day24-LeetCode:存在重复元素

    2024-03-19 23:42:03       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-19 23:42:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-19 23:42:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-19 23:42:03       82 阅读
  4. Python语言-面向对象

    2024-03-19 23:42:03       91 阅读

热门阅读

  1. LeetCode108 将有序数组转换为二叉搜索树

    2024-03-19 23:42:03       44 阅读
  2. 详细了解CSS

    2024-03-19 23:42:03       32 阅读
  3. 蓝桥集训之八数码

    2024-03-19 23:42:03       45 阅读
  4. 深入挖掘C语言之——枚举

    2024-03-19 23:42:03       41 阅读
  5. defer 中recovery from panic中的注意点

    2024-03-19 23:42:03       39 阅读
  6. LeetCode112 路径总和

    2024-03-19 23:42:03       41 阅读
  7. 【DRAM存储器二十四】DDR4介绍-DDR4 MR0-3详解

    2024-03-19 23:42:03       44 阅读
  8. 三国游戏.

    2024-03-19 23:42:03       38 阅读