Leetcode 每日一题 290.单词规律

news2024/12/30 2:41:38

目录

一、问题分析

二、解题思路

三、代码实现

四、复杂度分析

五、总结


在编程的世界里,我们常常会遇到各种有趣的字符串匹配问题。今天要探讨的就是这样一个问题:给定一种规律 pattern 和一个字符串 s,判断 s 是否遵循与 pattern 相同的规律。这里的 “遵循” 意味着 pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。

一、问题分析

首先,我们明确一下问题的关键要求:

  • pattern 仅包含小写英文字母,其长度范围是 1 <= pattern.length <= 300
  • s 包含小写英文字母和空格,且不包含前导或尾随空格,每个单词由单个空格分隔,长度范围是 1 <= s.length <= 3000
  • pattern 与 s 之间的对应关系必须是双向的,即一个字母对应一个特定单词,且一个单词也只能对应一个特定字母。

二、解题思路

为了判断这种双向对应关系,我们可以利用两个哈希表来分别记录从 pattern 中的字符到 s 中的单词的映射,以及从 s 中的单词到 pattern 中的字符的映射。

  1. 首先,将字符串 s 按照空格进行分割,得到一个单词数组 ss。如果 pattern 的长度与 ss 的长度不相等,那么直接返回 false,因为它们不可能存在一一对应的关系。
  2. 然后,遍历 pattern 和 ss,对于每一个位置 i
    • 将 pattern 中的字符作为键,ss 中的单词作为值存入 map 哈希表。
    • 将 ss 中的单词作为键,pattern 中的字符作为值存入 map1 哈希表。
  3. 最后,再次遍历 pattern 和 ss,检查 map 和 map1 中的映射关系是否正确。如果在任何位置发现不匹配的情况,即 map 中通过字符获取的单词与实际的 ss[i] 不相等,或者 map1 中通过单词获取的字符与实际的 pattern.charAt(i) 不相等,就返回 false。如果整个遍历过程都没有发现不匹配,那么说明 s 遵循 pattern 的规律,返回 true

过题图片

三、代码实现

以下是使用 Java 实现的代码:

class Solution {
    public boolean wordPattern(String pattern, String s) {
        // 用于存储从 pattern 中的字符到 s 中的单词的映射
        HashMap<Character,String> map = new HashMap<>();
        // 用于存储从 s 中的单词到 pattern 中的字符的映射
        HashMap<String,Character> map1 = new HashMap<>();
        // 将 s 按照空格分割成单词数组
        String[] ss = s.split(" ");
        // 如果 pattern 长度与单词数组长度不相等,直接返回 false
        if(pattern.length()!= ss.length) return false;
        // 遍历 pattern 和单词数组,建立双向映射
        for(int i = 0; i < pattern.length(); i++){
            map.put(pattern.charAt(i), ss[i]);
            map1.put(ss[i], pattern.charAt(i));
        }
        // 再次遍历,检查映射关系是否正确
        for(int i = 0; i < pattern.length(); i++){
            if(!map.get(pattern.charAt(i)).equals(ss[i])){
                return false;
            }
            if(!map1.get(ss[i]).equals(pattern.charAt(i))){
                return false;
            }
        }
        return true;
    }
}

四、复杂度分析

  • 时间复杂度:主要的操作是对 pattern 和 ss 进行两次遍历。第一次遍历用于建立哈希表,时间复杂度为 ,其中  是 pattern 的长度(也是 ss 的长度)。第二次遍历用于检查映射关系,时间复杂度也为 。所以总的时间复杂度为 。
  • 空间复杂度:需要创建两个哈希表来存储映射关系,在最坏情况下,哈希表中可能存储 pattern 中的所有字符和 ss 中的所有单词,所以空间复杂度为 ,其中  是 pattern 的长度(也是 ss 的长度)。

题目链接

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

五、总结

题目要求判断字符串 s 与给定的规律 pattern 是否完全匹配,这里的匹配是一种双向连接的对应关系,即 pattern 里的每个字母要和 s 中的每个非空单词一一对应,且反之亦然。同时,题目对 pattern 和 s 的长度、字符组成以及 s 的单词分隔形式等都做了相应限定,明确这些要求是正确解题的基础。

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

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

相关文章

Java项目实战II基于微信小程序的旅游社交平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着移动互联网的迅猛发展&#xff0c;旅游已经成为人…

Mybatis-Plus的主要API

一、实体类操作相关API BaseMapper<T>接口 功能&#xff1a;这是 MyBatis - Plus 为每个实体类对应的 Mapper 接口提供的基础接口。它提供了一系列基本的 CRUD&#xff08;增删改查&#xff09;操作方法。例如insert(T entity)方法用于插入一条记录&#xff0c;d…

第一个 JSP 程序

一个简单的 JSP 程序&#xff1a; 使用 IDEA 开发工具新建一个 maven 项目&#xff0c;具体操作如图所示&#xff1a; 配置 Tomcat 服务器 项目结构如下图所示&#xff1a; 3. 修改 index.jsp 页面的代码&#xff1a; <% page language"java" contentType&q…

使用android studio写一个Android的远程通信软件(APP),有通讯的发送和接收消息界面

以下是使用 Android Studio 基于 Java 语言编写一个简单的 Android APP 实现远程通信&#xff08;这里以 TCP 通信为例&#xff09;的代码示例&#xff0c;包含基本的通信界面以及发送和接收消息功能。 1. 创建项目 打开 Android Studio&#xff0c;新建一个 Empty Activity …

记录下nginx接口代理配置问题

其中api和api1是前面定义的upstream&#xff0c;ip相同只是端口不同。 一开始/api1/直接 像api一样 proxy_pass http://api1这样是不行的&#xff0c;因为会代理到 后端的 /api1/...接口&#xff0c;而后端实际接口地址是 /api/..... 所以必须像上面写法才能将外网的 /api…

【项目】基于PaddleOCR的文字检测识别项目

【项目】基于PaddleOCR的文字检测识别项目 简介安装与使用&#xff08;1&#xff09;Paddle环境安装&#xff08;2&#xff09;模型预测&#xff08;文本检测文本识别&#xff09;&#xff08;3&#xff09;文本检测识别模型训练&#xff08;4&#xff09;本地模型训练与预测&a…

mock.js介绍

mock.js http://mockjs.com/ 1、mock的介绍 *** 生成随机数据&#xff0c;拦截 Ajax 请求。** 通过随机数据&#xff0c;模拟各种场景&#xff1b;不需要修改既有代码&#xff0c;就可以拦截 Ajax 请求&#xff0c;返回模拟的响应数据&#xff1b;支持生成随机的文本、数字…

重磅升级:OpenAI o1模型上手实测,从芯片架构分析到象棋残局判断的全能表现

引言 昨日&#xff0c;在圣诞节系列发布会的第一天&#xff0c;OpenAI终于给我们带来了令人振奋的更新&#xff0c;这些更新有望塑造AI互动的未来。备受期待的OpenAI o1正式版的推出&#xff0c;标志着ChatGPT体验的重大进化&#xff0c;宣告了AI驱动应用新时代的开始。o1现已可…

DataSophon集成CMAK KafkaManager

本次集成基于DDP1.2.1 集成CMAK-3.0.0.6 设计的json和tar包我放网盘了. 通过网盘分享的文件&#xff1a;DDP集成CMAK 链接: https://pan.baidu.com/s/1BR70Ajj9FxvjBlsOX4Ivhw?pwdcpmc 提取码: cpmc CMAK github上提供了zip压缩包.将压缩包解压之后 在根目录下加入启动脚本…

【vivado】时序报告--best时序和worst时序

利用vivado进行开发时&#xff0c;生成best时序报告和worst时序报告。 best时序报告 slow选择min_max&#xff0c;fast选择none。 worst时序报告 fast选择min_max&#xff0c;slow选择none。

EasyMedia播放rtsprtmp视频流(flvhls)

学习链接 MisterZhang/EasyMedia - gitee地址 EasyMedia转码rtsp视频流flv格式&#xff0c;hls格式&#xff0c;H5页面播放flv流视频 EasyMedia播放rtsp视频流&#xff08;vue2、vue3皆可用&#xff09; EasyMedia转码rtsp视频流flv格式&#xff0c;hls格式&#xff0c;H5页…

Linux C/C++编程中的多线程编程基本概念

【图书推荐】《Linux C与C一线开发实践&#xff08;第2版&#xff09;》_linux c与c一线开发实践pdf-CSDN博客《Linux C与C一线开发实践&#xff08;第2版&#xff09;&#xff08;Linux技术丛书&#xff09;》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com…

FPGA工作原理、架构及底层资源

FPGA工作原理、架构及底层资源 文章目录 FPGA工作原理、架构及底层资源前言一、FPGA工作原理二、FPGA架构及底层资源 1.FPGA架构2.FPGA底层资源 2.1可编程输入/输出单元简称&#xff08;IOB&#xff09;2.2可配置逻辑块2.3丰富的布线资源2.4数字时钟管理模块(DCM)2.5嵌入式块 …

C语言程序设计P5-3【应用函数进行程序设计 | 第三节】——知识要点:函数的嵌套调用和递归调用

知识要点&#xff1a;函数的嵌套调用和递归调用 视频 目录 一、任务分析 二、必备知识与理论 三、任务实施 一、任务分析 本任务要求用递归法求 n!。 我们知道n!n(n-1)(n-2)……1n(n-1)!递归公式为&#xff1a; 1.上面公式分解为n!n(n-1)!&#xff0c;即将求n!的问题变为…

word实践:正文/标题/表图等的共用模板样式设置

说在前面 最近使用word新建文件很多&#xff0c;发现要给大毛病&#xff0c;每次新建一个word文件&#xff0c;标题/正文的字体、大小和间距都要重新设置一遍&#xff0c;而且每次设置这些样式都忘记了参数&#xff0c;今天记录一下&#xff0c;以便后续方便查看使用。现在就以…

【工具变量】上市公司企业劳动密集度数据(2008-2023年)

一、测算方式&#xff1a; 参考《数量经济技术经济研究》陈勇兵&#xff08;2023&#xff09;老师的做法&#xff0c;使用员工数量与销售收入的比值作为劳动密集度的度量标准* o/ b% C( e* U我们做的比他完善&#xff0c;分为四类大家可以做核心变量或者稳健性检验Labor1&…

YOLOv11修改推理图片的标签字体大小

先打开ultralytics/utils/plotting.py&#xff0c;并搜索font scale(vscode快捷键ctrlF): 在这行代码动手脚&#xff0c;例如调小分母就是把字改大&#xff1a; self.sf self.lw 完成&#xff0c;可以正常运行&#xff1a;

TCP Analysis Flags 之 TCP Spurious Retransmission

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…

在paddle中安装python-bidi出错

翻看网上解决方式&#xff0c;是由于系统中缺少 Rust 及其包管理器 Cargo。python-bidi 依赖 Rust 来编译其扩展&#xff0c;如果没有安装 Rust 和 Cargo&#xff0c;安装过程将无法继续。 解决方式 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh但是我的终端…

自动化测试工具Ranorex Studio(五十四)-CSV文件

CSV文件 你也可以通过选择CSV文件数据连接器来使用CSV文件为你的测试套件提供数据。在添加了CSV数据连接器后&#xff0c;管理数据源的对话框将被打开。 你可以在表色标示部分编辑数据连接器的名字&#xff0c;也可以在绿色标示的部分选择你要用的CSV文件。选择或者取消蓝色标示…