面试算法之哈希专题

ops/2024/10/19 7:36:10/

赎金信

在这里插入图片描述

class Solution {
public:bool canConstruct(string ransomNote, string magazine) {// 小写字母int r_cnt[26];int m_cnt[26];for(int i = 0; i< magazine.size(); i++) {m_cnt[magazine[i]-'a']++; // 统计}// 对比for(int i = 0; i< ransomNote.size(); i++) {if(m_cnt[ransomNote[i]-'a']) {m_cnt[ransomNote[i]-'a']--;} else {return false;}}return true;}
};
class Solution {
public:bool canConstruct(string ransomNote, string magazine) {// 小写字母int r_cnt[26];int m_cnt[26];for(int i = 0; i< magazine.size(); i++) {m_cnt[magazine[i]-'a']++; // 统计}// 对比for(int i = 0; i< ransomNote.size(); i++) {if(m_cnt[ransomNote[i]-'a']) {m_cnt[ransomNote[i]-'a']--;} else {return false;}}return true;}
};

同构字符串

在这里插入图片描述

class Solution {
public:bool isIsomorphic(string s, string t) {unordered_map<char,char> s_map;unordered_map<char,char> t_map;int s_size = s.size();int t_size = t.size();if(s_size != t_size) {return false;} for(int i = 0; i< s_size; i++) {char x = s[i];char y = t[i];if((s_map.count(x) && s_map[x] != y) || (t_map.count(y) && t_map[y] != x)) {return false;}s_map[x] = y;t_map[y] = x;}return true;    }
};

收获

了解了一下 有关于 unordered_map 中 count 函数的使用
s_map.count(x) 就是 键为 x 的个数

逐步解析
在这里插入图片描述

方法二
思路

通过 match 建立关系
通过 count 记录 t[i] 是否已经有映射

这部分是表示, 不存在 s[i] 的映射, 但是发现 t[i] 已经做好映射了 ( count[t[i]] > 0 ) 直接返回 false

  			if (match[s[i]] == '\0') { // 如果当前字符没有映射关系if (count[t[i]] == 0) { // 如果当前字符在t中没有出现过match[s[i]] = t[i]; // 建立映射关系count[t[i]] = 1; // 将该字符在t中的出现次数加1}elsereturn false; // 如果当前字符在t中已经出现过,则返回false}

在这里插入图片描述
图解
在这里插入图片描述

class Solution {
public:bool isIsomorphic(string s, string t) {unordered_map<char, char> match; // 用于存储字符之间的映射关系unordered_map<char, int> count; // 用于记录字符在t中出现的次数for (int i = 0; i < s.size(); i++) {if (match[s[i]] == '\0') { // 如果当前字符没有映射关系if (count[t[i]] == 0) { // 如果当前字符在t中没有出现过match[s[i]] = t[i]; // 建立映射关系count[t[i]] = 1; // 将该字符在t中的出现次数加1}elsereturn false; // 如果当前字符在t中已经出现过,则返回false}else { // 如果当前字符已经有映射关系if (match[s[i]] != t[i]) { // 如果映射关系不正确return false; // 返回false}}}return true; // 所有字符都满足同构条件,返回true}
};
class Solution {
public:bool wordPattern(string pattern, string s) {unordered_map<string,char> s_patterMap;unordered_map<char, string> pattern_sMap;// 遍历int p_len = pattern.size();int left = 0;int right = 0;for(int i = 0; i< p_len ; i++) {if(left >= s.size()) {return false;}// 遍历while(right < s.size() && s[right] != ' ') right++;// 右边界 right string str = s.substr(left, right-left);if(s_patterMap.count(str) && s_patterMap[str] != pattern[i]) {return false;}if(pattern_sMap.count(pattern[i]) && pattern_sMap[pattern[i]] != str) {return false;}s_patterMap[str] = pattern[i];pattern_sMap[pattern[i]] = str;left = right + 1;right = left;}if(right < s.size()) {return false;} else {return true;}}
};

http://www.ppmy.cn/ops/38873.html

相关文章

【一起深度学习——沐的Resnet】

沐神的Resnet 原理图&#xff1a;实现&#xff1a;定义残差块&#xff1a;定义Resnet模型&#xff1a;运行测试&#xff1a;输出结果&#xff1a; 原理图&#xff1a; 实现&#xff1a; 定义残差块&#xff1a; class Residual(nn.Module):def __init__(self,input_channels,…

Spark云计算平台Databricks使用,第一个Spark应用程序WordCount

1 上传文件 上传words.txt文件&#xff1a;Spark云计算平台Databricks使用&#xff0c;上传文件-CSDN博客 上传的文件的路径是/FileStore/tables/words.txt&#xff0c;保存在AWS的S3 hello world hello hadoop hello world hello databricks hadoop hive hbase yarn spark …

自存angular 自定义snackbar

定义 1.自定义样式 2.自定义组件 就在要使用snackbar的组件中 在module中引入该组件&#xff08;重新写一个组件也行的 直接引入就好&#xff09; 打开这个组件 给这个自定义的组件传参 这个自定义组件接参(类似对话框接参) 使用参数 在这个自定义组件中 做了点击如何关闭s…

【Linux】Centos7配置JDK

1.启动虚拟机、Xshell、Xftp 2.在Xshell中新建一个会话&#xff0c;用于连接到虚拟机中 3.因为虚拟机里自带有JDK&#xff0c;所以需要先卸载自带的JDK 3.1.查询已安装的 jdk 列表 rpm -qa | grep jdk3.2.将查询到的全部删除 yum -y remove XXX&#xff08;上面查询到的 j…

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第18课-购买头榜解密文件锁

【WEB前端2024】开源智体世界&#xff1a;乔布斯3D纪念馆-第18课-购买头榜解密文件锁 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世…

【个人博客搭建】(18)使用Quartz.NET 定时备份数据库

Quartz.NET在系统主要承担的一些关键功能&#xff1a; 任务调度&#xff1a;Quartz.NET 允许开发人员创建、调度和管理定时任务&#xff0c;支持简单触发器和Cron表达式等多样化的触发策略。灵活性&#xff1a;Quartz.NET 提供了灵活的任务安排机制&#xff0c;不仅支持基于时间…

最新版rancher环境配置安装和集群搭建详细教程记录

&#x1f680; 作者 &#xff1a;“二当家-小D” &#x1f680; 博主简介&#xff1a;⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人&#xff0c;8年开发架构经验&#xff0c;精通java,擅长分布式高并发架构,自动化压力测试&#xff0c;微服务容器化k…

9.为什么有时候会“烫烫烫”——之函数栈桢

目录 1. 什么是函数栈帧 2. 理解函数栈帧能解决什么问题呢&#xff1f; 3. 函数栈帧的创建和销毁解析 3.1 什么是栈&#xff1f; 3.2 认识相关寄存器和汇编指令 3.3 解析函数栈帧的创建和销毁 小知识&#xff1a;烫烫烫~ Q&A 1. 什么是函数栈帧 我们在写C语言代码…