23.哀家要长脑子了!

目录

1.290. 单词规律 - 力扣(LeetCode)

 2.532. 数组中的 k-diff 数对 - 力扣(LeetCode)

3.205. 同构字符串 - 力扣(LeetCode)

4.138. 随机链表的复制 - 力扣(LeetCode)

5.599. 两个列表的最小索引总和 - 力扣(LeetCode


1.290. 单词规律 - 力扣(LeetCode)

怎么打简单的标签,我第一反应是无从下手,不知所措。。。

这道题有两个要注意的点:一个是双向映射,一个是字符串中单词的分割

是这样一个思路: 

用两个map,一个map ps记录从pattern到s的映射,一个map sp记录从s到pattern的映射

start代表字符串s中某个单词的开头,end表示结尾

for循环遍历关规律pattern中的每个字母,如果进入循环后,发现单词的起点已经大于s的长度,说明字符串s中的每个单词已经遍历完毕,但是pattern还没有遍历完毕(因为进入了for循环)说明s的长度大于pattern,out。

接下来就是分割单词:当 end小于字符串s的长度并且此时位置上的元素不为空格,说明这个单词还没找完整,end后移继续查找完整。当end大于字符串s的长度,说明字符串s中最后一个单词找完整的;当end小于s的长度,但是此时位置上的元素为空格,说明s中的某一个单词查找完毕。

判断双向映射:如果此时的pattern字符中的ch已经在ps中存在,但是这个ch所映射的单词跟我们上面提取的单词不一样。out。或者此时的单词作为的索引所映射的字符跟我们现在遍历到的字符不一样,out。

一定要两个映射表都判断一下,因为要判断双向一致,比如下面这个样例

pattern = "abba"  s = "dog dog dog dog"

 如果只判断一个映射表ps的话:只能知道a对应dog,b也对应dog,是对的,不会返回false

但实际上我们需要唯一的映射,a对应dog,b不能对应dog了,out。

判断完之后:将此时新的这个映射关系加入到两边的映射表中

更新单词的起点终点:新一个单词的起点是上一个单词终点的下一位(单词的起点终点唯一同一位置开始遍历,起点索引不懂,终点索引去找终点

规律pattern遍历完毕后,如果最后一轮遍历所更新的起点的索引正好等于字符串s的长度加1。说明单词个数正好也等于规律中的字符个数。

class Solution {
public:bool wordPattern(string pattern, string s) {unordered_map<char, string> ps;unordered_map<string, char> sp;int n = pattern.size(), m = s.size(), start = 0, end = 0;string word;char ch;for(int i = 0; i < n; i++){if(start > m) return false;while(end < m && s[end] != ' ') end++;word = s.substr(start, end - start);    ch = pattern[i];if(ps.count(ch) && ps[ch] != word || sp.count(word) && sp[word] != ch){return false;}ps[ch] = word;sp[word] = ch;start = end + 1;end = start;  }return start == m + 1;}
};
 2.532. 数组中的 k-diff 数对 - 力扣(LeetCode)

 首先我自己做就是用个set,然后加上差值看set中有没有对应需要的值,有点像前几天的两数之和,但是这样的话处理0或者负数元素就会出错。因为k是题目要求的差值的绝对值。

| nums[i] - nums[j] | = k 

k为正数:nums[j] = nums[i] - k

k为负数:nums[j] = nums[i] + k

是这样的:用两个set,一个set用来满足条件的数值对,到时候返回它的长度就好了,另一个set用来判断此时正在遍历的元素满足题目条件所需对应数字num-k有没有在原数组中(题目有要求)

num是此时数组正在遍历的元素,num-k是满足题目要求所对应的数字。如果num-k在vis中,说明num是正数,并且原数组nums中有这样两个数字可以构成一组数对来满足题目要求。把对应的num-k数字放到结果数组中。如果num+k在数组中,说明num是负数,并且原数组nums中有这样两个数字可以构成一组数对来满足题目要求。把对应的num数字放到结果数组中。最后把当前正在遍历的num放入vis中,代表原数组中有这个数字,可以参与构成数对。每次都放比较小的那个元素,其实我有点疑惑,但是还没有彻底弄懂了。

class Solution {
public:int findPairs(vector<int>& nums, int k) {unordered_set<int> res;unordered_set<int> vis;for(const int& num : nums){if(vis.count(num - k)){    res.insert(num - k);}if(vis.count(num + k)){res.insert(num);}vis.insert(num);}return res.size();}
};
3.205. 同构字符串 - 力扣(LeetCode)

跟第一题一样的思路,但是我先判断了数组长度,不一样最喜欢i直接返回。out

class Solution {
public:bool isIsomorphic(string s, string t) {int n = s.size(), m = t.size();unordered_map<char, char> st;unordered_map<char, char> ts;if(n != m) return false;for(int i = 0; i < n; i++){if(st.count(s[i]) && st[s[i]] != t[i] || ts.count(t[i]) && ts[t[i]] != s[i] ){return false;}st[s[i]] = t[i];ts[t[i]] = s[i];}return true; }
};
4.138. 随机链表的复制 - 力扣(LeetCode)

 其实我觉得这道题还挺有意思的,就是这个random的存在,一开始我还没看懂这个题目有什么不同,我发现有时候我老是看不出题目的意思,读不懂题意。

这个题目关键的就是这个random,我们复制链表的时候,可能此时这个结点random指向的结点还没有被创建,如果被创建了又应该怎样记录呢。此时就用哈希表。

首先建立一个 还没有任何关系的哈希表,里面只是一个个结点,结点之间没有任何的指针指向。

接着用指向原链表的cur指针开始建立映射关系了。

 哎哟,其实我还是有点懵懵懂懂,模模糊糊

class Solution {
public:Node* copyRandomList(Node* head) {if(!head) return head;Node *cur = head;unordered_map<Node*, Node*> map;while(cur){map[cur] = new Node(cur->val);cur = cur->next;}    cur = head;while(cur){map[cur]->next = map[cur->next];map[cur]->random = map[cur->random];cur = cur->next;     }return map[head];}
};
5.599. 两个列表的最小索引总和 - 力扣(LeetCode)

 用一个map来操作记录他们之间的索引关系。把lsit1中的元素作为map的索引,list1中元素的下标作为map中的值。然后list2中的元素作为索引去操作去匹配。

class Solution {
public:vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {unordered_map<string, int> map;for(int i = 0; i < list1.size(); i++){map[list[i]] = i;}int sum = INT_MAX;vector<string> res;for(int i = 0; i < list2.size(); i++){// 如果有相同的餐厅if(map.count(list2[i])){int j = map[list2[i]];// 如果发现有更小的索引和if(i + j < sum){// 清空原来记录的结果res.clear();// 记录此时更小的索引和所对应得餐厅res.push_back(list2[i]);// 记录新的索引和sum = i + j;}    // 如果索引和是最小的else if(i + j == sum){// 记录一下辣res.push_back(list2[i]);        }            }return res;}
};

啊啊啊啊,我这被饼干操纵的一生。。。

是这样,昨天我晚饭吃的一个茶叶蛋,一包徐福记岩板烧,一个鸡蛋香松面包,然后昨天我又想逃避vue,又看不下软考,我就去吃了个烤全翅,好难吃,我还吃了个徐福记三包饼干,然后我又吃了个芋泥饼干,我又吃了徐福记三包饼干和一个牛肉干,还有四分之三的早茶饼干。嗯。。今天早上吃的是一碗蛋炒粉(放了蒜末,酸豆角,葱和很多很多的醋)全吃完了,嗯。还有徐福记三包饼干,一个香干,一个盐焗鸭蛋,昨天剩下的四分之一饼干,还有一瓶豆奶。小姐姐你挺能吃的。。

5.3开始写的。。。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1411356.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

webpack与vite

webpack 使用步骤&#xff1a; 初始化项目 pnpm init -y安装依赖webpack、webpack-cli在项目中创建src目录&#xff0c;然后编写代码&#xff08;index.js&#xff09;执行pnpm weboack来对代码进行打包&#xff08;打包后观察dist文件夹&#xff09; 配置古文件&#xff08;w…

异地组网,让“远程运维”更简单

您是否在联网场景中有过这些需求&#xff1f; 摄像头需要联网统一监控、PLC需要联网告别本地升级、工控机需要联网告别本地配置、广告屏需要联网告别本地下载视频、远程打开终端设备WEB进行配置......这些问题有人新升级的“异地组网”功能统统可以解决&#xff01; 告别繁琐…

【基于MAX98357的Minimax(百度)长文本语音合成TTS 接入教程】

【基于MAX98357的Minimax&#xff08;百度&#xff09;长文本语音合成TTS 接入教程】 1. 前言2. 先决条件2.1 硬件准备2.2 软件准备2.3 接线 3. 核心代码3.1 驱动实现3.2 代码解析 4. 播放文本5. 结论 视频地址&#xff1a; SeeedXIAO ESP32S3 Sense【基于MAX98357的Minimax&am…

C语言阶段性测试错题纠正与拓展

引言&#xff1a;在2024年4月26日&#xff0c;我进行了C语言知识的“期末考试”。通过这次考试&#xff0c;我发现了我的知识漏洞。所以&#xff0c;我写下这篇博客来记录我的错题&#xff0c;并进行纠正&#xff0c;然后对于以前遗忘知识的回顾。 更多有关C语言的知识详解可前…

VMware虚拟机中ubuntu使用记录(5)—— 如何在ubuntu中安装USB相机ros驱动并获取usb摄像头数据

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、ROS下USB相机驱动1.准备工作(1) 下载驱动(2) 创建ROS工作空间 2. 安装usb_cam驱动(1) 安装usb_cam驱动包(2) 编译代码 3. 修改usb_cam驱动的配置文件(1) 查看US…

设计模式之组合实体模式

在编程的奇幻森林里&#xff0c;树木与枝叶错综复杂&#xff0c;如何让代码世界井然有序&#xff1f;组合实体模式&#xff08;Composite Pattern&#xff09;就像一位高明的园艺师&#xff0c;它以一种巧妙的方式&#xff0c;将个体与整体统一管理&#xff0c;让无论是单个对象…

古典密码学简介

目录 C. D. Shannon: 一、置换密码 二、单表代替密码 ① 加法密码 ② 乘法密码 ③密钥词组代替密码 三、多表代替密码 代数密码 四、古典密码的穷举分析 1、单表代替密码分析 五、古典密码的统计分析 1、密钥词组单表代替密码的统计分析 2、英语的统计规…

刷代码随想录有感(54):二叉搜索树中的搜索(BST)

题干&#xff1a; 代码&#xff08;递归实现&#xff09;&#xff1a; TreeNode* searchBST(TreeNode* root, int val){if(root NULL || root-> val val)return root;TreeNode* res;if(val > root->val) res searchBST(root->right, val);if(val < root->…

Redis 实战之对象

Redis 实战 - 对象 对象的类型与编码类型编码和底层实现 字符串对象编码的转换字符串命令的实现 列表对象编码转换列表命令的实现 哈希对象编码转换哈希命令的实现 集合对象集合命令的实现 有序集合对象编码的转换有序集合命令的实现 类型检查与命令多态类型检查的实现多态命令…

工业光源-半环形光源-特点

产品特点 ◆高密度LED排列&#xff1b; ◆应用于特殊结构的安装与出光方向&#xff1b; ◆从180方向照射&#xff0c;消除阴影&#xff1a; ◆中间开孔&#xff0c;使光源与相机镜头完美契合&#xff1a; ◆多角度可选&#xff0c;可适应不同工作距离的应用&#xff1b; ◆可选…

c++11 标准模板(STL)本地化库 - 平面类别(time_get) - 从输入字符序列中解析时间/日期值到 std::tm 中(八)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 从输入字符序列中解析时间/日期值到 std::tm 中 std::time_get …

算法学习系列(五十五):背包模型(三)

目录 引言一、潜水员二、背包问题求具体方案三、机器分配四、开心的今明五、金明的预算方案 引言 今天介绍的是背包模型&#xff0c;还是以题目的形式来介绍的。主要讲了背包问题求方案&#xff0c;就是由最优方案递推回去即可。还有就是一些比较经典的背包问题&#xff0c;其…

Sqlserver批量迁移Job

因为切换物理机&#xff0c;需要把数据库的作业从A机器迁移到B机器&#xff0c;数据库整体备份还原就可以了&#xff0c;数据库上的作业不会跟着带过去&#xff0c;需要手动创建&#xff0c;作业数量太多&#xff0c;逐一创建太浪费时间&#xff0c;Microsoft SQL Server Manag…

【LLM多模态】MiniGPT4模型结构和训练流程

note 图生文应用场景&#xff1a;比如电商领域根据产品图像生成产品描述、娱乐领域中根据电影海报生成电影介绍等MiniGPT-4将预训练的大语言模型和视觉编码器参数同时冻结&#xff0c;只需要单独训练线性投影层&#xff0c;使视觉特征和语言模型对齐。MiniGPT4的视觉编码器&am…

使用docker-compose编排Lnmp(dockerfile) 完成Wordpress

目录 一、 Docker-Compose 1.1Docker-Compose介绍 1.2环境准备 1.2.1准备容器目录及相关文件 1.2.2关闭防火墙关闭防护 1.2.3下载centos:7镜像 1.3Docker-Compose 编排nginx 1.3.1切换工作目录 1.3.2编写 Dockerfile 文件 1.3.3修改nginx.conf配置文件 1.4Docker-Co…

【前端学习——防抖和节流+案例】

定义 【前端八股文】节流和防抖 防抖 连续触发事件但是在设定的一段时间内只执行最后一次 代码实现思路【定时器】 大概意思就是&#xff1a; 每次按起键盘后&#xff0c;都将之前的定时器删除&#xff0c;重新开始计时。 节流 连续触发事件&#xff0c;只执行一次 …

Web APIs 学习归纳8---移动端特效

上一节学习了PC端的特效&#xff0c;现在学习移动端的特效。 一、移动端触屏事件 1.1 触屏事件概述 移动端浏览器兼容性较好&#xff0c;我们不需要考虑以前 JS 的兼容性问题&#xff0c;可以放心的使用原生 JS 书写效果&#xff0c;但是移动 端也有自己独特的地方。比如触屏…

【Linux网络】SSH服务

目录 一、SSH概述与使用 1.1 定义 1.2 优点 1.3 原理 1.4 命令登录 1.5 跳板登录 1.6 远程控制 二、SSH配置 2.1 常用的服务端配置 2.2 ssh服务最优配置 三、免密登录 3.1 操作原理 3.2 操作步骤 一、SSH概述与使用 1.1 定义 SSH&#xff08;Secure Shell&#…

宝塔怎么配置nginx

宝塔怎么配置nginx 1.找到nginx配置位置 2.修改nginx.conf文件 3.重启nginx

kali 网络环境设置

一、修改网卡配置 1.1 系统桌面上单击右键&#xff0c;在弹出的菜单中选择 Open Terminal Here。 1.2 输入命令 vim /etc/network/interfaces&#xff0c;显示配置网卡参数为。iface lo 一般指 本地环回接口&#xff0c; iface eth0 网卡为系统正在使用的网卡&#xff0c;其中的…