当前位置: 首页 > news >正文

力扣 单词规律

所用数据结构

哈希表 

核心方法

判断字符串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" 

代码的执行过程如下:

  1. 首先我们将字符串 s 按照空格分割成单词数组 list = ["dog", "cat", "cat", "dog"]
  2. 由于 list 的长度为 4 与 pattern 的长度为 4 相等,所以可以继续执行后续步骤。
  3. 创建两个 HashMap c2s 和 s2c
  4. 开始遍历 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"

代码的执行过程如下:

  1. 首先我们将字符串 s 按照空格分割成单词数组 list = ["dog", "cat", "cat", "fish"]
  2. 由于 list 的长度为 4 与 pattern 的长度为 4 相等,所以可以继续执行后续步骤。
  3. 创建两个 HashMap c2s 和 s2c
  4. 开始遍历 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 是否存在一对一的映射关系&#xff0c;按照题意&#xff0c;双向连接的对应规律。 思路以及实现步骤 1.字符串s带有空格&#xff0c;因此需要转换成字符数组进行更方便的操作&#xff0c;将字符串s拆分成单词列表…...

10款好用不火的PC软件,真的超好用!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/市场上有很多软件&#xff0c;除了那些常见的大众化软件&#xff0c;还有很多不为人知的小众软件&#xff0c;它们的作用非常强大&#xff0c;简洁…...

Windows怎么实现虚拟IP

在做高可用架构时&#xff0c;往往需要用到虚拟IP&#xff0c;在linux上面有keepalived来实现虚拟ip的设置。在windows上面该怎么弄&#xff0c;keepalived好像也没有windows版本&#xff0c;我推荐一款浮动IP软件PanguVip&#xff0c;它可以实现windows上面虚拟ip的漂移。设置…...

【计算机网络】HTTP——基于HTTP的功能追加协议(个人笔记)

学习日期&#xff1a;2024.6.29 内容摘要&#xff1a;基于HTTP的功能追加协议和HTTP/2.0 HTTP的瓶颈与各功能追加协议 需求的产生 在Facebook、推特、微博等平台&#xff0c;每分每秒都会有人更新内容&#xff0c;我们作为用户当然希望时刻都能收到最新的消息&#xff0c;为…...

【多媒体】Java实现MP4视频播放器【JavaFX】【音视频播放】

在Java中播放视频可以使用多种方案&#xff0c;最常见的是通过Swing组件JFrame和JLabel来嵌入JMF(Java Media Framework)或Xuggler。不过&#xff0c;JMF已经不再被推荐使用&#xff0c;而Xuggler是基于DirectX的&#xff0c;不适用于跨平台。而且上述方案都需要使用第三方库。…...

2024 Parallels Desktop for Mac 功能介绍

Parallels Desktop的简介 Parallels Desktop是一款由Parallels公司开发的桌面虚拟化软件&#xff0c;它允许用户在Mac上运行Windows和其他操作系统。通过强大的技术支持&#xff0c;用户无需重新启动电脑即可在Mac上运行Windows应用程序&#xff0c;实现了真正的无缝切换。 二…...

颍川韩氏,来自战国七雄韩国的豪族

颍川是战国七雄韩国故土&#xff0c;韩国被秦国灭国后&#xff0c;王公贵族们除了坚决反秦的被杀了外&#xff0c;大部分都留存了下来。这些人在楚、汉反秦战争中&#xff0c;成为反秦统一战线的重要力量&#xff0c;其中两人先后被封为重新恢复的韩国的国王。 一个是横阳君韩…...

Spring boot中如何使用Thymeleaf模板

大家好&#xff0c;我是 网创有方。今天给大家分享下Spring boot中如何使用Thymeleaf模板。 在 IntelliJ IDEA 中使用 Thymeleaf 模板引擎来开发 Spring Boot 应用程序是相对简单的。以下是一些基本步骤&#xff0c;帮助你在 IDEA 中设置和使用 Thymeleaf&#xff1a; 创建一个…...

单片机学习(14)--DS18B20温度传感器

DS18B20温度传感器 13.1DS18B20温度传感器基础知识1.DS18B20介绍2.引脚及应用电路3.内部结构框图4.存储器框图5.单总线介绍6.单总线电路规范7.单总线时序结构8.DS18B20操作流程9.DS18B20数据帧 13.2DS18B20温度读取和温度报警器代码1.DS18B20温度读取&#xff08;1&#xff09;…...

ue 材质贴图Tiling repeat

材质问题&#xff0c;如下 贴图显然不符合逻辑&#xff0c;太大&#xff0c;并且是一次性贴图 换一个红砖纹理&#xff0c;就看清了&#xff0c;砖太大了 修改&#xff1a; 拖出一个TexCoord&#xff0c;代表坐标&#xff0c;拖出一个参数&#xff0c;代表次数&#xff0c;如…...

【图像超分辨率】一个简单的总结

文章目录 图像超分辨率(Image Super-Resolution, ISR)1 什么是图像超分辨率&#xff1f;2 图像超分辨率通常有哪些方法&#xff1f;&#xff08;1&#xff09;基于插值的方法&#xff08;2&#xff09;基于重建的方法&#xff08;3&#xff09;基于学习的方法&#xff08;LR im…...

WEB与低代码:B/S架构在开发中的应用与优势

在互联网迅猛发展的今天&#xff0c;WEB应用已经成为人们日常生活和工作中不可或缺的一部分。随着技术的进步和需求的多样化&#xff0c;开发高效、灵活且易于维护的WEB应用变得尤为重要。B/S架构&#xff08;Browser/Server Architecture&#xff09;作为一种常见的WEB应用架构…...

内容营销专家刘鑫炜揭秘:姜萍一夜暴红背后的品牌传播密码

在互联网的浪潮下&#xff0c;品牌传播的方式愈发多样和复杂。近日&#xff0c;江苏省涟水中等专业学校的十七岁中专生姜萍因在世界级数学竞赛中取得优异成绩而一夜暴红&#xff0c;成为网络上的热议焦点。 在这个充满变数的时代&#xff0c;谁也无法预测下一个网红会是谁。然…...

安装VEX外部编辑器

Houdini20配置VEX外部编辑器方法_哔哩哔哩_bilibili 下载并安装Visual Studio Code软件&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 在Visual Studio Code软件内&#xff0c;安装相关插件&#xff0c;如&#xff1a; 中文汉化插件vex插件 安装Houdini Expr…...

ISO 19110全局要求类/req/global/bound-association-role要求的详细解释

/req/global/bound-association-role 要求: 如果模型允许在一个关联角色&#xff08;association role&#xff09;中存在“rolePlayer”关联&#xff0c;并且该角色属于一个“globalProperty”角色&#xff0c;那么这种绑定必须通过一个绑定的关联角色实体&#xff08;bound …...

武汉凯迪正大等简述电缆电容检测:原理、应用与重要性

为了确保电缆的安全稳定运行评估电缆绝缘质量以及检测潜在故障&#xff0c;需要对电缆做一些必要的检测。本文将依照凯迪正大的一些经验对电缆电容检测的原理、应用及其重要性进行简单的序述。 一、电缆电容检测的原理 电缆电容检测基于电容的基本特性&#xff0c;电容是指两个…...

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 &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 代码如下&#xff1a; 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调试器深度解析与实战

&#x1f41e; IPython调试秘籍&#xff1a;pdb调试器深度解析与实战 在Python编程中&#xff0c;调试是开发过程中不可或缺的一环。IPython&#xff0c;作为一个强大的交互式Python解释器&#xff0c;内置了pdb调试器&#xff0c;使得代码调试变得异常便捷。本文将深入探讨如…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...