leetcode 1813. 句子相似性 III【python3双指针的实现思路及过程整理】

news2024/11/27 22:21:17

题目

一个句子是由一些单词与它们之间的单个空格组成,且句子的开头和结尾没有多余空格。比方说,“Hello World”,“HELLO”,"hello world hello world"都是句子。每个单词都只包含大写和小写英文字母。
如果两个句子 sentence1和sentence2,可以通过往其中一个句子插入一个任意的句子(可以是空句子)而得到另一个句子,那么我们称这两个句子是相似的。比方说,sentence1 = "Hello my name is Jane"且sentence2 = “Hello Jane”,我们可以往sentence2中"Hello"和"Jane"之间插入"my name is"得到sentence1。给你两个句子sentence1和sentence2,如果sentence1和sentence2是相似的,请你返回true,否则返回false。

示例 1

  • 输入:sentence1 = “My name is Haley”, sentence2 = “My Haley”
  • 输出:true
  • 解释:可以往 sentence2 中 “My” 和 “Haley” 之间插入 “name is” ,得到 sentence1 。

题解

题目倒是很好理解。刚开始是判断哪个串是子串,子串的word对另一个串进行划分,划分的非空个数超过1即为False,为1则为True。发现这么实现非常麻烦。后来对题目进行仔细分析,发现如果两个句子相似的话有如下三种情况。
1 一个sentence的单词分别按顺序出现在另一个sentence的头与尾

image.png
2 一个sentence的单词分别按顺序只出现在另一个sentence的头部
image.png

3 一个sentence的单词分别按顺序只出现在另一个sentence的尾部
image.png
因此,只需要匹配两个句子头部与尾部相似的word,如果匹配中的个数与其实一个小的sentence相同则认为相似,否则不相似。
以示例1为例来说明执行过程。
初始如下图所示。
image.png
start索引用来判断两个句子前比缀相同的单词数。
image.png
当两个句子的start指针对应的word不相同时,开始从后到前遍历两个句子的end指针。
image.png
最后当end指针不移动时,比较一下前缀匹配的word数与后缀匹配的word数据之和是否与两个句子中的最不长度的word数相同。
image.png

代码

接下来可以直接写代码:

class Solution:
    def areSentencesSimilar(self, sentence1: str, sentence2: str) -> bool:
        sentence1_list=sentence1.split()
        sentence2_list=sentence2.split()
        start,end=0,0
        while start<len(sentence1_list) and start<len(sentence2_list) and sentence1_list[start]==sentence2_list[start]:
            start+=1
        while end<len(sentence1_list)-start and end<len(sentence2_list)-start and sentence1_list[-end-1]==sentence2_list[-end-1]:
            end+=1
        return start+end==min(len(sentence1_list),len(sentence2_list))

计算复杂度

  • 时间复杂度,m 是 sentence1的长度,n 是 sentence2的长度。字符串分割和双指针判断操作都需要遍历 O ( m + n ) O(m+n) O(m+n)个字符。
  • 空间复杂度, 主要是分割句子需要 O ( m + n ) O(m+n) O(m+n)的空间,双指针的空间是 O ( 1 ) O(1) O(1),因此整体的空间复杂度为 O ( m + n ) O(m+n) O(m+n)

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

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

相关文章

【数据结构】图的案例引入及类型定义

6.2 案例引入 六度空间理论 六度空间理论验证 6.3 图的类型定义 图的抽象数据类型定义如下 ADT Graph {数据对象V&#xff1a;具有相同特性的数据元素的集合&#xff0c;称为顶点集。数据关系R&#xff1a;R{VR}VR{<v,w>|<v,w>|v,w∈V ^ p(v,w),<v,w>表述…

WebStorage之浏览器的本地存储(结合案例)

目录前言一&#xff0c;WebStorage二&#xff0c;localStorage2.1 存储2.2 读取2.3 删除2.4 清除全部2.5 代码三&#xff0c;sessionStorage3.1 用法3.2 区别3.3 代码四&#xff0c;结合案例后记前言 浏览器的本地存储可以缓存一些信息在浏览器中&#xff0c;方便取用。在学习…

Docker(黑马spring cloud笔记)

Docker 目录Docker一、介绍和安装1. 安装2. 启动3. 镜像加速二、Docker基本操作1. 镜像操作2. 容器操作3. 数据卷操作三、Dockerfile1. 镜像结构2. Dockerfile四、Docker-Compose1. 安装2. 基本命令五、Docker私服搭建六、练习练习1&#xff1a;save和load练习2&#xff1a;doc…

【MySQL】深入学习B+索引的使用

文章目录1. 前言2. 索引的代价2.1 空间上的代价2.2 时间上的代价3. B树索引的使用3.1 提取正确的扫描区间3.1.1 所有搜索条件都可以生成合适的扫描区间的情况3.1.2 有的搜索搜索条件不能生成合适的扫描区间3.1.3 从复杂的搜索条件中找出扫描区间3.1.4 使用联合索引执行查询时对…

5. 统计学基础2:协方差、相关系数、协方差矩阵

文章目录1. 协方差2. 相关系数【就是使 |协方差|<1】3. 协方差矩阵1. 协方差 标准差和方差一般是用来描述一维数据的&#xff0c; 具体介绍见&#xff1a;5. 统计学基础1&#xff1a;平均值…四分位数、方差、标准差&#xff08;均方差&#xff09;、标准误&#xff08;标准…

ModelMapper 一文读懂

目录 1、ModelMapper简介 1.1 引入ModelMapper 的依赖 1.2 进行Mapping映射 1.3 ModelMapper 工作原理 2、ModelMapper 基础操作 2.1 ModelMapper 基本映射 2.2 ModelMapper 集合转换 2.3 ModelMapper 指定默认值 2.4 ModelMapper 属性值转换 2.5 ModelMapper 属…

node.js创建服务器及知识点

node.js创建服务器及知识点用http协议创建web服务器http协议知识点用express创建web服务器express中路由知识点fs文件系统模块文件流querystring查询字符串模块URL模块中间件挂载路由器node.js和mysql项目实战知识点完整代码注意点用http协议创建web服务器 //引入http const h…

【强训】Day07

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、选择二、编程1. Fibonacci数列2. 合法括号序列判断 ☆答案1. 选择2. 编程普通小孩也要热爱生活&#xff01; 一、选择 Math.round(11.5) 等于&#xff08;&#xff09; A 11 B 11.5 C 12 D 12.5 以下对继承的描…

Spring Boot(五十四):SpringBoot事件监听机制

1 Java监听机制 SpringBoot 的监听机制&#xff0c;其实是对Java提供的事件监听机制的封装。 Java中的事件监听机制定义了以下几个角色&#xff1a; 事件&#xff1a;Event&#xff0c;继承 java.util.EventObject 类的对象事件源&#xff1a;Source &#xff0c;任意对象Ob…

Unet网络解析

1 Unet网络概述 论文名称&#xff1a;U-Net: Convolutional Networks for Biomedical Image Segmentation 发表会议及时间 &#xff1a;MICCA ( 国际医学图像计算和 计算机辅 助干预会 议 ) 2 0 1 5 Unet提出的初衷是为了解决医学图像分割的问题。 Unet网络非常的简单&…

leetcode 2246. Longest Path With Different Adjacent Characters(不同相邻字母的最长路径)

给一棵以节点0为根的树&#xff08;不一定是二叉树&#xff09;&#xff0c;共有n个节点&#xff0c;0&#xff5e;n-1&#xff0c; 同样的&#xff0c;有长度为n的数组parent, parent[i]表示第 i 个节点的parent, 0的parent是-1. 长度为n的字符串&#xff0c;s(i)表示第i个节点…

JSPmvc

一、JSP 概述 JSP&#xff08;全称&#xff1a;Java Server Pages&#xff09;&#xff1a;Java 服务端页面。是一种动态的网页技术&#xff0c;其中既可以定义HTML、JS、CSS等静态内 容&#xff0c;还可以定义 Java代码的动态内容&#xff0c;也就是 JSP HTML Java 。如下就…

【金融】新成立基金建仓时点、行业分布与市场行情关系探究

需要进一步交流&#xff0c;获取数据和代码的同学欢迎私信奥~基于新成立基金建仓带入市场的巨量资金会推动市场行情这一逻辑&#xff0c;开展了一系列研究。首先提出了通过基金净值识别建仓行为&#xff08;累计绝对值涨跌幅法&#xff09;和通过基金β值识别建仓行为&#xff…

Vue知识系列-VS Code的安装+Vue环境的搭建+Vue指令

一、VS Code下载地址 Visual Studio Code - Code Editing. Redefined 二、VS Code初始化设置 1.安装插件 在安装好的VSCode软件的扩展菜单中查找安装如下4个插件 2、创建项目 vscode本身没有新建项目的选项&#xff0c;所以要先创建一个空的文件夹&#xff0c;如project_xx…

自主异常检测算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

AppScan 扫描web应用程序

系列文章 AppScan介绍和安装 第二节-AppScan 扫描web应用程序 1.环境布置 我们准备了如下一个靶场用来做实验 2.扫描步骤 1.启动AppScan 2.选择 【扫描web应用程序】 3.输入起始URL&#xff0c;点击【下一步】 http://127.0.0.1:83/4.选择【不使用代理】,点击【下一…

ctfshow php特性[125-135]

&#x1f60b;大家好&#xff0c;我是YAy_17&#xff0c;是一枚爱好网安的小白&#xff0c;自学ing。 本人水平有限&#xff0c;欢迎各位大佬指点&#xff0c;一起学习&#x1f497;&#xff0c;一起进步⭐。⭐此后如竟没有炬火&#xff0c;我便是唯一的光。⭐web 125<?php…

word怎么转换成pdf?其实很简单,看这里即可!

转眼间又到了校招的季节&#xff0c;想必许多小伙伴都在忙着编辑自己的简历吧。不过&#xff0c;咱们编辑的时候常常用到的都是word文件&#xff0c;但是当我们要将文件投递出去的时候就需要用到pdf了。其实不仅仅是投递简历&#xff0c;许多地方在要求我们发送正式文件的时候都…

vue+node+mysql全栈项目完整记录

文章目录vuenodemysql全栈项目完整记录写在前面项目最终界面展示项目框架搭建后端创建后端项目编写入口文件数据库及数据库使用前端创建前端项目使用elementUI必要包安装设置跨域访问&#xff0c;全局挂载axios删除无用的文件和代码设置统一的页面样式主页面页面设计路由设计登…

【C语言】柔性的数组是什么?C/C++程序的内存开辟又是?

本文主要讲解柔性数组的相关知识点&#xff0c;并穿插一下C/C程序的内存开辟&#xff0c;涉及到动态内存管理函数&#xff0c;如有不了解的&#xff0c;请参考这一篇文章【C语言】小王带您轻松实现动态内存管理&#xff08;简单易懂&#xff09;_小王学代码的博客-CSDN博客 目录…