首页 > 其他分享 >哈希表——解205. 同构字符串及290. 单词规律

哈希表——解205. 同构字符串及290. 单词规律

时间:2023-08-20 18:11:07浏览次数:42  
标签:字符 return 哈希 pattern pos words 205 290

205. 同构字符串

此题是「290. 单词规律」的简化版,需要我们判断 s 和 t 每个位置上的字符是否都一一对应,即 s 的任意一个字符被 t 中唯一的字符对应,同时 t 的任意一个字符被 s 中唯一的字符对应。这也被称为「双射」的关系。

以示例 2为例,t 中的字符 a 和 r虽然有唯一的映射 o,但对于 s 中的字符 o 来说其存在两个映射 {a,r},故不满足条件。

因此,我们维护两张哈希表:

  • 第一张哈希表 s2t 以 s 中字符为键,映射至 t 的字符为值,
  • 第二张哈希表 t2s 以 t 中字符为键,映射至 s 的字符为值。

从左至右遍历两个字符串的字符,不断更新两张哈希表,看是否冲突(若s[i]已经存在hash中的key,则看它对应的value是否等于t[i],若不等于,则返回false)。

如果遍历结束没有出现冲突,则表明两个字符串是同构的,返回 true 即可。

class Solution {
public:
    // 哈希表法
    bool isIsomorphic(string s, string t) {
        unordered_map<char, char> s2t;  // key是s[i], value是t[i]
        unordered_map<char, char> t2s;  // key是t[i], value是s[i]
        for (int i = 0; i < s.size(); ++i) {
            auto pos = s2t.find(s[i]);
            auto pos1 = t2s.find(t[i]);
            if ((pos != s2t.end()) && (pos->second != t[i])) {
                return false;
            } else {
                s2t[s[i]] = t[i]; 
            }

            if ((pos1 != t2s.end()) && (pos1->second != s[i])) {
                return false;
            } else {
                t2s[t[i]] = s[i]; 
            }
        }
        return true;
    }
};

 

290. 单词规律

这题和上面一题类似,不同之处在于,这题需要多做一步单词提取。

class Solution {
public:
    bool wordPattern(string pattern, string s) {
        // 利用双指针,把word提取出来
        s = s+" ";
        vector<string> words;
        int l = 0;
        int r = 1;
        while (l+r < s.size()) {
            if (s[l+r] != ' ') {
                r++;
            } else {
                string word = s.substr(l, r);
                words.push_back(word);
                l = l+r+1;
                r = 1;
            }
        }

        if (words.size() != pattern.size()) {
            return false;
        }

        // Hash
        unordered_map<char, string> hash;
        unordered_map<string, char> hash2;
        for (int i = 0; i < pattern.size(); ++i) {
            auto pos = hash.find(pattern[i]);
            auto pos2 = hash2.find(words[i]);
            if (pos != hash.end() && pos->second != words[i]) {
                return false;
            } else {
                hash[pattern[i]] = words[i];
            }

            if (pos2 != hash2.end() && pos2->second != pattern[i]) {
                return false;
            } else {
                hash2[words[i]] = pattern[i];
            }
        }
        return true;
    }
};

 




标签:字符,return,哈希,pattern,pos,words,205,290
From: https://www.cnblogs.com/spacerunnerZ/p/17644342.html

相关文章

  • 哈希表(实现 Python 中的集合 set)
    博客地址:https://www.cnblogs.com/zylyehuo/#-*-coding:utf-8-*-classLinkList:classNode:def__init__(self,item=None):self.item=itemself.next=NoneclassLinkListIterator:def__init__(self,node......
  • 有关C++哈希函数的常用形式,具体解释见注释
    #pragmaonce#include<unordered_set>#include<unordered_map>namespacehash_function{ //将参数传入 template<typename...Types> inlinesize_thash_val(constTypes&...args){ size_tseed=0; hash_val(seed,args...); returnseed;......
  • day07 - 哈希表part02
    454. 四数相加II讲解classSolution{public:intfourSumCount(vector<int>&nums1,vector<int>&nums2,vector<int>&nums3,vector<int>&nums4){//mapunordered_map<int,int>map_two;i......
  • 构造一致性哈希算法
    先构造一个长度为232的整数环(这个环被称为一致性Hash环),根据节点名称的Hash值(其分布为[0,232-1])将服务器节点放置在这个Hash环上,然后根据数据的key值计算得到其Hash值(其分布也为[0,2^32-1]),接着在Hash环上顺时针查找距离这个key值的Hash值最近的服务器节点,完成key到服务器的映射查找......
  • day06 - 哈希表part01
    242. 有效的字母异位词讲解classSolution{public:boolisAnagram(strings,stringt){if(s.length()!=t.length())returnfalse;map<char,int>map_s;map<char,int>map_t;for(inti=0;i<s.length()......
  • 考研数据结构——每日一题[哈希表]
    840.模拟散列表维护一个集合,支持如下几种操作:Ix,插入一个数x;Qx,询问数x是否在集合中出现过;现在要进行N次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数N,表示操作数量。接下来N行,每行包含一个操作指令,操作指令为Ix,Qx中的一种。输出格式对于每......
  • i913900hx和i912900h区别 i9 13900hx和12900h对比
    i913900Hx采用10nm制作工艺最高睿频5.4GHz二十四核心三十二线程三级缓存36MB热设计功耗(TDP)157W选i913900hx还是i912900h这些点很重要看过你就懂了http://www.adiannao.cn/dyi912900H参数配置:10nm的工艺制程,6个大核8个小核,14核心20线程,3.8GHz的主频,5.0GHz的睿频,功耗最高为1......
  • 鲁棒图像哈希
    鲁棒图像哈希标题页:鲁棒图像哈希目录页一、背景介绍图像哈希的概念、意义和应用场景图像哈希面临的问题与研究现状二、关键技术概述基于局部和全局特征的哈希基于特征降维的哈希基于统计特征的哈希基于学习的哈希基于深度学习的哈希方法三、典型算法案例基于Zernik......
  • 字符串哈希
    没有模的版本constintN=1000010;constintm=131;constintmod=1e9+7;intn,T;chars[N];intf[N],p[N];intmain(){ scanf("%s",s+1);n=strlen(s+1); p[0]=1; for(inti=1;i<=n;i++){ f[i]=f[i-1]*m......
  • LRU机制:哈希表+双向链表 [labuladong-刷题打卡 day9]
    今天的知识点LRU缓存机制的实现。学过计组都知道LRU算法(leastrecentlyused最近最少使用算法)是资源管理中的常用算法。那么他是如何实现的呢?LRU原理和Redis实现146.LRU缓存此题算是对LRU机制的一个简化。为了使查找删除在O(1)中实现,我们结合哈希表和双向链表各自在查找和......