力扣 单词规律

所用数据结构
哈希表
核心方法
判断字符串pattern 和字符串s 是否存在一对一的映射关系,按照题意,双向连接的对应规律。
思路以及实现步骤
1.字符串s带有空格,因此需要转换成字符数组进行更方便的操作,将字符串s拆分成单词列表之后,就可以很方便地通过索引访问每个单词,这样在后续的遍历和比较过程中会更加的高效。因此首先将字符串s按照空格分割成单词数组list。
String[] list = s.split(" ");
2.如果list的长度和pattern的长度不相等,直接说明二者无法建立映射关系,直接返回false即可。
if(list.length != pattern.length()){return false;}
3.创建两个哈希表 c2s c2s 分别用于存储字符到单词和单词到字符的映射关系
HashMap<Character,String> c2s = new HashMap<Character,String>();HashMap<String,Character> s2c = new HashMap<String,Character>();
4. 遍历list数组和字符串pattern,检查当前字符和单词是否与之前建立的映射关系一致,不一致直接返回false 每次遍历都把当前字符和单词的映射关系存储到两个HashMap中
for(int i = 0;i<list.length;i++){if(c2s.containsKey(pattern.charAt(i))){if( !c2s.get(pattern.charAt(i)).equals(list[i])){return false;}}if(s2c.containsKey(list[i])){if( !s2c.get(list[i]).equals(pattern.charAt(i))){return false;}}c2s.put(pattern.charAt(i),list[i]);s2c.put(list[i],pattern.charAt(i));}
6.如果遍历完成说明存在单词和字符的双向映射关系,返回true,否则直接在循环中返回false
下面是完整的代码
class Solution {public boolean wordPattern(String pattern, String s) {HashMap<Character,String> c2s = new HashMap<Character,String>();HashMap<String,Character> s2c = new HashMap<String,Character>();String[] list = s.split(" ");if(list.length != pattern.length()){return false;}for(int i = 0;i<list.length;i++){if(c2s.containsKey(pattern.charAt(i))){if( !c2s.get(pattern.charAt(i)).equals(list[i])){return false;}}if(s2c.containsKey(list[i])){if( !s2c.get(list[i]).equals(pattern.charAt(i))){return false;}}c2s.put(pattern.charAt(i),list[i]);s2c.put(list[i],pattern.charAt(i));}return true;}
}
下面模拟一下代码的执行过程,模拟的是成功匹配的过程
pattern = "abba"
s = "dog cat cat dog"
代码的执行过程如下:
- 首先我们将字符串
s按照空格分割成单词数组list = ["dog", "cat", "cat", "dog"]。 - 由于
list的长度为 4 与pattern的长度为 4 相等,所以可以继续执行后续步骤。 - 创建两个 HashMap
c2s和s2c。 - 开始遍历
pattern和list。
第一次循环:
pattern.charAt(0) = 'a'list[0] = "dog"- 由于
c2s中不存在 'a' 这个键,所以将 ('a', "dog") 添加到c2s中。 - 由于
s2c中不存在 "dog" 这个值,所以将 ("dog", 'a') 添加到s2c中。
第二次循环:
pattern.charAt(1) = 'b'list[1] = "cat"- 由于
c2s中不存在 'b' 这个键,所以将 ('b', "cat") 添加到c2s中。 - 由于
s2c中不存在 "cat" 这个值,所以将 ("cat", 'b') 添加到s2c中。
第三次循环:
pattern.charAt(2) = 'b'list[2] = "cat"- 由于
c2s中已经存在 'b' 这个键,且对应的值为 "cat",所以检查是否与当前值 "cat" 相同,结果为 true。 - 由于
s2c中已经存在 "cat" 这个值,且对应的字符为 'b',所以检查是否与当前字符 'b' 相同,结果为 true。
第四次循环:
pattern.charAt(3) = 'a'list[3] = "dog"- 由于
c2s中已经存在 'a' 这个键,且对应的值为 "dog",所以检查是否与当前值 "dog" 相同,结果为 true。 - 由于
s2c中已经存在 "dog" 这个值,且对应的字符为 'a',所以检查是否与当前字符 'a' 相同,结果为 true。
经过上述步骤,我们发现 pattern 和 s 的映射关系是一致的,所以最终返回 true。
模拟的是失败匹配的过程
pattern = "abba"
s = "dog cat cat fish"
代码的执行过程如下:
- 首先我们将字符串
s按照空格分割成单词数组list = ["dog", "cat", "cat", "fish"]。 - 由于
list的长度为 4 与pattern的长度为 4 相等,所以可以继续执行后续步骤。 - 创建两个 HashMap
c2s和s2c。 - 开始遍历
pattern和list。
第一次循环:
pattern.charAt(0) = 'a'list[0] = "dog"- 由于
c2s中不存在 'a' 这个键,所以将 ('a', "dog") 添加到c2s中。 - 由于
s2c中不存在 "dog" 这个值,所以将 ("dog", 'a') 添加到s2c中。
第二次循环:
pattern.charAt(1) = 'b'list[1] = "cat"- 由于
c2s中不存在 'b' 这个键,所以将 ('b', "cat") 添加到c2s中。 - 由于
s2c中不存在 "cat" 这个值,所以将 ("cat", 'b') 添加到s2c中。
第三次循环:
pattern.charAt(2) = 'b'list[2] = "cat"- 由于
c2s中已经存在 'b' 这个键,且对应的值为 "cat",所以检查是否与当前值 "cat" 相同,结果为 true。 - 由于
s2c中已经存在 "cat" 这个值,且对应的字符为 'b',所以检查是否与当前字符 'b' 相同,结果为 true。
第四次循环:
pattern.charAt(3) = 'a'list[3] = "fish"- 由于
c2s中已经存在 'a' 这个键,且对应的值为 "dog",所以检查是否与当前值 "fish" 相同,结果为 false。因此返回false。
相关文章:
力扣 单词规律
所用数据结构 哈希表 核心方法 判断字符串pattern 和字符串s 是否存在一对一的映射关系,按照题意,双向连接的对应规律。 思路以及实现步骤 1.字符串s带有空格,因此需要转换成字符数组进行更方便的操作,将字符串s拆分成单词列表…...
10款好用不火的PC软件,真的超好用!
AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/市场上有很多软件,除了那些常见的大众化软件,还有很多不为人知的小众软件,它们的作用非常强大,简洁…...
Windows怎么实现虚拟IP
在做高可用架构时,往往需要用到虚拟IP,在linux上面有keepalived来实现虚拟ip的设置。在windows上面该怎么弄,keepalived好像也没有windows版本,我推荐一款浮动IP软件PanguVip,它可以实现windows上面虚拟ip的漂移。设置…...
【计算机网络】HTTP——基于HTTP的功能追加协议(个人笔记)
学习日期:2024.6.29 内容摘要:基于HTTP的功能追加协议和HTTP/2.0 HTTP的瓶颈与各功能追加协议 需求的产生 在Facebook、推特、微博等平台,每分每秒都会有人更新内容,我们作为用户当然希望时刻都能收到最新的消息,为…...
【多媒体】Java实现MP4视频播放器【JavaFX】【音视频播放】
在Java中播放视频可以使用多种方案,最常见的是通过Swing组件JFrame和JLabel来嵌入JMF(Java Media Framework)或Xuggler。不过,JMF已经不再被推荐使用,而Xuggler是基于DirectX的,不适用于跨平台。而且上述方案都需要使用第三方库。…...
2024 Parallels Desktop for Mac 功能介绍
Parallels Desktop的简介 Parallels Desktop是一款由Parallels公司开发的桌面虚拟化软件,它允许用户在Mac上运行Windows和其他操作系统。通过强大的技术支持,用户无需重新启动电脑即可在Mac上运行Windows应用程序,实现了真正的无缝切换。 二…...
颍川韩氏,来自战国七雄韩国的豪族
颍川是战国七雄韩国故土,韩国被秦国灭国后,王公贵族们除了坚决反秦的被杀了外,大部分都留存了下来。这些人在楚、汉反秦战争中,成为反秦统一战线的重要力量,其中两人先后被封为重新恢复的韩国的国王。 一个是横阳君韩…...
Spring boot中如何使用Thymeleaf模板
大家好,我是 网创有方。今天给大家分享下Spring boot中如何使用Thymeleaf模板。 在 IntelliJ IDEA 中使用 Thymeleaf 模板引擎来开发 Spring Boot 应用程序是相对简单的。以下是一些基本步骤,帮助你在 IDEA 中设置和使用 Thymeleaf: 创建一个…...
单片机学习(14)--DS18B20温度传感器
DS18B20温度传感器 13.1DS18B20温度传感器基础知识1.DS18B20介绍2.引脚及应用电路3.内部结构框图4.存储器框图5.单总线介绍6.单总线电路规范7.单总线时序结构8.DS18B20操作流程9.DS18B20数据帧 13.2DS18B20温度读取和温度报警器代码1.DS18B20温度读取(1)…...
ue 材质贴图Tiling repeat
材质问题,如下 贴图显然不符合逻辑,太大,并且是一次性贴图 换一个红砖纹理,就看清了,砖太大了 修改: 拖出一个TexCoord,代表坐标,拖出一个参数,代表次数,如…...
【图像超分辨率】一个简单的总结
文章目录 图像超分辨率(Image Super-Resolution, ISR)1 什么是图像超分辨率?2 图像超分辨率通常有哪些方法?(1)基于插值的方法(2)基于重建的方法(3)基于学习的方法(LR im…...
WEB与低代码:B/S架构在开发中的应用与优势
在互联网迅猛发展的今天,WEB应用已经成为人们日常生活和工作中不可或缺的一部分。随着技术的进步和需求的多样化,开发高效、灵活且易于维护的WEB应用变得尤为重要。B/S架构(Browser/Server Architecture)作为一种常见的WEB应用架构…...
内容营销专家刘鑫炜揭秘:姜萍一夜暴红背后的品牌传播密码
在互联网的浪潮下,品牌传播的方式愈发多样和复杂。近日,江苏省涟水中等专业学校的十七岁中专生姜萍因在世界级数学竞赛中取得优异成绩而一夜暴红,成为网络上的热议焦点。 在这个充满变数的时代,谁也无法预测下一个网红会是谁。然…...
安装VEX外部编辑器
Houdini20配置VEX外部编辑器方法_哔哩哔哩_bilibili 下载并安装Visual Studio Code软件:Download Visual Studio Code - Mac, Linux, Windows 在Visual Studio Code软件内,安装相关插件,如: 中文汉化插件vex插件 安装Houdini Expr…...
ISO 19110全局要求类/req/global/bound-association-role要求的详细解释
/req/global/bound-association-role 要求: 如果模型允许在一个关联角色(association role)中存在“rolePlayer”关联,并且该角色属于一个“globalProperty”角色,那么这种绑定必须通过一个绑定的关联角色实体(bound …...
武汉凯迪正大等简述电缆电容检测:原理、应用与重要性
为了确保电缆的安全稳定运行评估电缆绝缘质量以及检测潜在故障,需要对电缆做一些必要的检测。本文将依照凯迪正大的一些经验对电缆电容检测的原理、应用及其重要性进行简单的序述。 一、电缆电容检测的原理 电缆电容检测基于电容的基本特性,电容是指两个…...
python调用阿里云OSS对象存储
1)安装SDK import oss2 print(oss2.__version__) 如果能返回SDK版号,则安装成功 2)配置访问凭证 import oss2 from project1 import settings #以下参数在阿里云账号中可以查到 auth=oss2.Auth(settings.ACCESS_KEY_ID, settings.ACCESS_KEY_SECRET) endpoint=settings.E…...
530、二叉搜索树的最小绝对差
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等于两值之差的绝对值。 代码如下: class Solution { private: int result INT_MAX; TreeNode* pre NULL; void traversal(TreeNode…...
docker配置redis主从复制
下载redis,复制redis.conf 主节点(6379) 修改redis.conf # bind 127.0.0.1 # 注释掉这里 protected-mode no # 改为no port 6379从节点(6380) 修改redis.conf bind 127.0.0.1 protected-mode no # 改为no port 6380 replicaof 172.17.0.2 6379 # 这里的ip为主节点容器的i…...
IPython调试秘籍:pdb调试器深度解析与实战
🐞 IPython调试秘籍:pdb调试器深度解析与实战 在Python编程中,调试是开发过程中不可或缺的一环。IPython,作为一个强大的交互式Python解释器,内置了pdb调试器,使得代码调试变得异常便捷。本文将深入探讨如…...
现代C++中的编译期反射替代思路
现代C中的编译期反射替代思路C 长期缺乏完整标准反射能力,但工程上依然经常需要“遍历字段、生成元信息、自动序列化、自动注册”。在正式反射广泛可用之前,开发者通常通过宏、模板特化、tuple 适配和代码生成等方式实现替代方案。一种常见思路是手工提供…...
取号机嵌入式扫码模组选型与集成实战:以4500R为例破解复杂场景应用难题
1. 项目概述:取号机扫码模组的选型困境与破局在智慧政务大厅、银行网点、医院门诊这些我们日常办事的高频场景里,取号机早已不是新鲜事物。但不知道你有没有留意过,现在越来越多的取号机旁边,除了传统的按键和触摸屏,还…...
Whisky停止维护后,如何在M系列Mac上继续运行Windows应用?5种技术实现路径深度解析
Whisky停止维护后,如何在M系列Mac上继续运行Windows应用?5种技术实现路径深度解析 【免费下载链接】Whisky A modern Wine wrapper for macOS built with SwiftUI 项目地址: https://gitcode.com/gh_mirrors/wh/Whisky 当看到Whisky项目官方宣布&…...
合宙BluePill开发板:9.9元ARM Cortex-M核心板硬件解析与实战指南
1. 项目概述:一块“炸场”的开发板意味着什么最近在嵌入式开发圈子里,一块名为“合宙BluePill”的新品开发板以9.9元包邮的价格开售,瞬间点燃了众多开发者、电子爱好者和学生群体的热情。这个价格,别说是一块功能完整的开发板&…...
FPGA新手避坑指南:用Vivado IP核搞定AXI总线,从看懂波形开始
FPGA新手避坑指南:用Vivado IP核搞定AXI总线,从看懂波形开始 第一次在Vivado中看到AXI总线波形时,我盯着屏幕上跳动的信号线完全摸不着头脑。VALID和READY信号像在玩捉迷藏,突发传输的时序如同天书——这大概是每个FPGA初学者都会…...
QtUnblockNeteaseMusic终极指南:高效解锁网易云音乐地区限制
QtUnblockNeteaseMusic终极指南:高效解锁网易云音乐地区限制 【免费下载链接】QtUnblockNeteaseMusic A desktop client for UnblockNeteaseMusic, made with Qt. 项目地址: https://gitcode.com/gh_mirrors/qt/QtUnblockNeteaseMusic QtUnblockNeteaseMusic…...
如何快速上手CircuitJS1桌面版:离线电路仿真的终极指南
如何快速上手CircuitJS1桌面版:离线电路仿真的终极指南 【免费下载链接】circuitjs1 Standalone (offline) version of the Circuit Simulator with small modifications based on modified NW.js. 项目地址: https://gitcode.com/gh_mirrors/circ/circuitjs1 …...
基于Agen项目构建个人AI代理:从LLM原理到邮件处理实战
1. 项目概述:从“Agen”看个人化AI代理的构建思路最近在GitHub上看到一个名为“Agen”的项目,作者是Anjuan555。这个项目名本身就很值得玩味——“Agen”,很容易让人联想到“Agent”(代理),但又少了一个“t…...
Ubuntu 20.04上virt-manager报GDBus错误?别慌,三步排查法搞定它
Ubuntu 20.04 virt-manager报GDBus错误的深度排查指南 当你正准备用virt-manager管理KVM虚拟机时,突然弹出一个令人困惑的GDBus错误——这种场景对于Linux虚拟化用户来说并不陌生。这个看似简单的错误背后,其实涉及Linux桌面环境中多个关键组件的协同工作…...
3大技术优势:AEUX如何实现Sketch/Figma到After Effects的无缝设计转换
3大技术优势:AEUX如何实现Sketch/Figma到After Effects的无缝设计转换 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX AEUX是一款专注于提升UX动效设计效率的开源工具&#…...
