LeetCode 面试经典 150_哈希表_单词规律(41_290_C++_简单)

    • 题目描述:
    • 输入输出样例:
    • 题解:
      • 解题思路:
        • 思路一(哈希表):
      • 代码实现
        • 代码实现(思路一(哈希表)):
        • 以思路一为例进行调试

题目描述:

给定一种规律 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 中每个单词都被 单个空格 分隔

题解:

解题思路:

思路一(哈希表):

1、具体思路如下:
判断 pattern 中的字符c 与 s中对应的字符串 str 是否对应。
①、c 之前存在映射关系
        之前的映射关系与 c:str 相同,继续判断pattern中剩余字符
        之前的映射袁旭与 c:str 不同,返回false
②、c 之前不存在映射关系
        str 不存在之前的映射关系中,建立映射关系 c:str
        str 存在之前的映射关系中,返回false
2、复杂度分析:
① 时间复杂度:O(n + m),其中n是字符串s的长度,m是pattern的长度。在循环中使用ss >> str因此整个字符串的处理是O(n),遍历pattern中的每个字符进行匹配O(m)。
② 空间复杂度:O(n + m),stringstream的消耗和需要存储pattern中的字符映射和s中的单词。

代码实现

代码实现(思路一(哈希表)):
class Solution {
public:bool wordPattern(string pattern, string s) {stringstream ss(s);  // 使用stringstream将输入字符串s分割成单词unordered_map<char, string> mp;  // 用于存储字符和单词的映射关系unordered_set<string> set;  // 用于检查一个单词是否已经被映射string str;for (int i = 0; i < pattern.size(); i++) {  // 遍历pattern中的每个字符ss >> str;  // 从stringstream中读取一个单词if (mp.count(pattern[i])) {  // 如果当前字符已经有映射if (mp[pattern[i]] != str) {  // 检查当前字符映射的单词是否与当前单词相同return false;  // 如果不同,则返回false}} else {if (set.count(str)) {  // 如果当前单词已经被其他字符映射过return false;  // 如果是重复的单词,返回false}mp[pattern[i]] = str;  // 为当前字符创建一个新的映射关系set.insert(str);  // 将当前单词添加到set中,确保它不会被重复映射}}if (ss >> str) return false;  // 如果在读取完所有pattern字符后仍有剩余的单词,则返回false,表示长度不匹配return true;  // 如果所有检查都通过,返回true}
};
以思路一为例进行调试
#include<iostream>
#include<unordered_map>
#include<unordered_set>
#include<sstream>
using namespace std;class Solution {
public:bool wordPattern(string pattern, string s) {stringstream ss(s);  // 使用stringstream将输入字符串s分割成单词unordered_map<char, string> mp;  // 用于存储字符和单词的映射关系unordered_set<string> set;  // 用于检查一个单词是否已经被映射string str;for (int i = 0; i < pattern.size(); i++) {  // 遍历pattern中的每个字符ss >> str;  // 从stringstream中读取一个单词if (mp.count(pattern[i])) {  // 如果当前字符已经有映射if (mp[pattern[i]] != str) {  // 检查当前字符映射的单词是否与当前单词相同return false;  // 如果不同,则返回false}} else {if (set.count(str)) {  // 如果当前单词已经被其他字符映射过return false;  // 如果是重复的单词,返回false}mp[pattern[i]] = str;  // 为当前字符创建一个新的映射关系set.insert(str);  // 将当前单词添加到set中,确保它不会被重复映射}}if (ss >> str) return false;  // 如果在读取完所有pattern字符后仍有剩余的单词,则返回false,表示长度不匹配return true;  // 如果所有检查都通过,返回true}
};int main(int argc, char const *argv[])
{string pattern="abba";string s="dog dog dog dog";Solution s1;if (s1.wordPattern(pattern,s)){cout<<"true"<<endl;    }else{cout<<"false"<<endl;}return 0;
}

LeetCode 面试经典 150_哈希表_单词规律(41_290)原题链接
欢迎大家和我沟通交流(✿◠‿◠)

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

librespeed c++ 上传下载带宽测试 排坑全流程

在搭建 LibreSpeed 测速服务并实现基于 curl/API 的上传下载测试时&#xff0c;遇到 Nginx 配置冲突、PHP 权限异常等问题。本文将梳理从环境搭建到功能验证的全流程&#xff0c;针对 “curl 上传报 404/405”“PHP-FPM 权限拒绝”等典型问题&#xff0c;提供可复现的解决方案。…

重读生成概率模型1----基础概念

1 KL 散度 KL 散度的作为是描述两个分布的差异的&#xff0c;首先是度量一个分布&#xff0c;用熵来度量。 1.1 熵 在介绍熵之间&#xff0c;首先要度量单个事件的信息量 I(x)−logP(x)I(x)-logP(x)I(x)−logP(x) 整体的信息量 H(P)Ex P[−logP(x)]−∑P(x)logP(x) \begin{alig…

排查解决磁盘占用高问题(容器挂载的磁盘)

最近遇到磁盘占用高的告警&#xff0c;记录一下解决的思路。 首先是系统触发告警&#xff0c;通知我们某台机器磁盘占用高。&#xff08;或其他途径得知&#xff09; 通过XShell登录该机器。 执行df-h命令查看挂载占用情况找到真正占用高的挂载点挂载点/home目录占用高&#xf…

流体(1)

流体 Minecraft 中的流体(Fluid),也常被称为液体(Liquid),是一类能够自由流动、形成河流、瀑布或湖泊的特殊方块。它们的行为基于简化的流体力学,是游戏世界中动态环境的重要组成部分。 💧 流体是什么? 在 Minecraft 中,流体核心特点包括: 源方块与流动:每个流…

机器学习-卷积神经网络(CNN)

全连接层->卷积层 用有一个隐藏层的MLP训练ImageNet数据集&#xff08;300*300的图像&#xff0c;有1000个类别&#xff09;&#xff0c;要有10000个输出 会有10亿个可学习的参数&#xff0c;量太大 全连接&#xff1a;一个输出是根据所有输入加权得到在图片中识别物体&…

Ubuntu 磁盘扩容与扩容失败问题解决( df -h 与 GParted 显示空间不一致的问题 -LVM)

在管理 Linux 磁盘时&#xff0c;你是否遇到过这样的困惑&#xff1a;正常扩容之后&#xff0c;发现GParted 显示某个分区还有几十 GiB 可用&#xff0c;但 df -h 却提示该分区已接近满额&#xff1f;这种 “空间幻觉” 背后是系统存储管理的分层设计&#xff0c;本文将从原理到…

PyQt5中QLineEdit控件数值显示与小数位数控制

在PyQt5应用程序开发中&#xff0c;QLineEdit控件常用于显示和编辑文本内容。当需要用它来显示数值并控制小数位数时&#xff0c;开发者需要掌握一些特定的技巧。本文将深入探讨几种实现方法&#xff0c;每种方法都附带完整独立的代码示例。 数值格式化基础 在Python中&#xf…

LangChain使用方法以OpenAI 的聊天模型GPT-4o为例

以使用 OpenAI 的聊天模型&#xff08;如 GPT-4&#xff09;为例&#xff0c;从设置环境、初始化模型、调用模型到处理响应的各个方面进行介绍&#xff1a; 1. 环境设置 安装 langchain-openai 包。设置环境变量 OPENAI_API_KEY&#xff0c;用于认证&#xff08;以linux为例&am…

Oracle为数据大表创建索引方案

在日常业务中&#xff0c;避免不了为数据量大表补充创建索引的情况&#xff0c;如果快速、有效地创建索引成了一个至关重要的问题&#xff08;注意&#xff1a;虽然提供有ONLINE在线执行的方式&#xff0c;理想状态下不会阻塞DML操作&#xff0c;但ONLINE在开始、结束的两个时刻…

网站服务相关问题

目录 HTTP常见的状态码 http和https的区别以及使用的端口号 http处理请求的过程 https认证过程 正向代理和反向代理的区别 HTTP常见的状态码 HTTP&#xff08;超文本传输协议&#xff09;定义了一系列的状态码&#xff0c;用于表示客户端请求的处理结果。以下是一些常见的…

Go并发编程实战:深入理解Goroutine与Channel

Go并发编程实战&#xff1a;深入理解Goroutine与ChannelGo并发编程实战&#xff1a;深入理解Goroutine与Channel概述1. 为什么是Go的并发&#xff1f;从“线程”与“协程”说起2. Goroutine&#xff1a;如何使用&#xff1f;3. Channel&#xff1a;Goroutine间的安全通信创建与…

2025服贸会“海淀之夜”,点亮“科技”与“服务”底色

2025年9月12日傍晚&#xff0c;北京颐和园&#xff0c;十七孔桥旁&#xff0c;2025年中国国际服务贸易交易会“海淀之夜”如约而至。在“海淀之夜”&#xff0c;科技机构、金融机构、咨询服务机构、出海服务企业以及跨国企业和国际友人等&#xff0c;将目光聚焦于此。被第三方机…

qt使用camke时,采用vcpkg工具链设置VTK的qt模块QVTKOpenGLNativeWidget

下载:QVTKOpenGLNativeWidget嵌入qt应用中资源-CSDN下载 1.通过vcpkg安装VTK,目前的VTK里面默认为qt6,如果需要安装qt5,需要将端口配置进行修改 笔者的vcpkg的vtk端口路径:D:\vcpkg\ports\vtk portfile.cmake 修改点: #第一处 #file(READ "${CURRENT_INSTALLED_DIR}/sh…

Axios在鸿蒙应用开发中的使用

目录一、简介二、安装与配置三、axios用法1.axios泛型参数(1).第三个泛型参数-约束data请求参数的类型(2).第二个泛型参数-决定后台返回数据的类型2.axios拦截器3.请求工具封装统一处理业务状态码错误统一处理401或404错误一、简介 Axios 是一个基于 Promise 的网络请求库&…

第九周文件上传

文件上传漏洞 不同的网站要不同的webshell。我们使用是php开发的网站。 一服务器白名单绕过 服务端白名单(Whitelist)是⼀种安全机制&#xff0c;它只允许预定义的合法元素通过&#xff08;只有有限的元素进入&#xff09;&#xff0c;其他所有内容默认被拒绝。相比黑名单&am…

计算机视觉必读论文:从经典到前沿

计算机视觉必读论文:从经典到前沿 一、前言 二、经典论文解读​ 2.1 图像分类​ 2.1.1 《ImageNet Classification with Deep Convolutional Neural Networks》(AlexNet)​ 2.1.2 《Very Deep Convolutional Networks for Large-Scale Image Recognition》(VGGNet)​ 2.1.…

对比PowerBI的字段参数,QuickBI的已选字段还有改进的空间

对比PowerBI的字段参数&#xff0c;QuickBI的已选字段还有改进的空间 之前分享过QuickBI的已选字段 vs PowerBI的字段参数&#xff0c;QuickBI可以在表格中实现PowerBI的字段参数效果&#xff0c;甚至比PowerBI实现的过程和使用方式更丝滑。 但如果应用到图形中会怎么样呢&am…

飞算JavaAI:Java开发新时代的破晓之光

免责声明&#xff1a;此文章的所有内容皆是本人实验测评&#xff0c;并非广告推广&#xff0c;并非抄袭。如有侵权&#xff0c;请联系&#xff0c;谢谢&#xff01;【#飞算JavaAl炫技赛】 【#Java开发】摘要&#xff1a;飞算JavaAI作为全球首款聚焦Java的智能开发助手&#xff…

vulntarget-c靶场内网渗透

1. 环境搭建 2.对ubuntu20的渗透 对其进行端口扫描 访问80端口 发现是laravel框架。版本是v8.78.1 使用 kaili 自带的msf 进行渗透 search laravel use exploit/multi/php/ignition_laravel_debug_rce执行利用完成检测 上传木马 先将木马进行base64编码 <?php eval($_P…

基于大模型多模态的人体体型评估:从“尺码测量”到“视觉-感受”范式

基于大模型多模态的人体体型评估&#xff1a;从“尺码测量”到“视觉-感受”范式摘要&#xff1a;传统体型识别依赖CV骨架/关键点与像素量尺&#xff0c;容易受衣物、发型、姿态、光照影响&#xff0c;且“厘米级数值”与穿衣体验、审美感受之间存在鸿沟。本文提出一种基于大模…