算法随笔_23: 通过删除字母匹配到字典里最长单词
上一篇:算法随笔_22:数组中的k-diff对-CSDN博客
======
题目描述如下:
给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。
如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字符串。
示例 1:
输入:s = "abpcplea", dictionary = ["ale","apple","monkey","plea"] 输出:"apple"
======
算法思路:
根据题目要求,我们可以枚举dictionary里的每个字符串str1,判断str1是否可以通过删除 s 中的某些字符得到。在所有匹配到的str1中选出长度最大的那个。如果长度一样,选出字母序最小的那个。如果使用Python语言,两个字符串比较大小是基于字典顺序进行的,较小的字符串就是字母序最小的那个。
算法现在还剩一个问题,就是如何判断str1是否可以通过删除 s 中的某些字符得到?
首先能想到的还是暴力解法,两层循环,分别枚举str1和s字符串,比较两个字符是否一样,最终得出结论。由于算法的最外层还有一层枚举dictionary,所以这样算法时间复杂度很高了,我们需要考虑一下如何优化它。
经过进一步的分析,我们发现,如果枚举完str1的第一个元素,并且在s的下标p2处找到了相同的字符时,当开始枚举str1的第二个元素时,我们不需要从s的下标0处开始匹配,我们只需要从p2+1处开始匹配。因为题目是要求删除s中的字符来得到字符串str1,因此,s剩下的字符之间的顺序是不变的。str1的第二个元素必然要从s的p2+1处开始寻找。这样就简化了很多的重复寻找。因此对于问题"判断str1是否可以通过删除 s 中的某些字符得到",我们可以给出下面的算法:
设两个指针p1,p2,分别指向字符串s和str1的起始处。设match_cnt为字符匹配数。
如果两个字符相同,我们右移p2指针,且对match_cnt加1。
不管两个字符是否相同,我们都需要访问s的下一个元素,所以我们需要右移p1指针。
当p1或p2任意一个指针到达字符串末尾时,我们退出循环。如果match_cnt等于str1字符串的长度,就表示我们找到了一个符合条件的字符串。
为了节省空间,我们可以对整个算法再做一个小小的优化。我们不需要把符合条件的字符串存入数组当中。我们只需把当前的结果与先前的结果res_str做一个比较。如果当前结果的字符串的长度比先前结果res_str的长度长,我们就替换res_str。长度相同的条件下,如果字母序更小,我们也替换字符串res_str。
下面为代码实现:
class Solution(object):def findLongestWord(self, s, dictionary):""":type s: str:type dictionary: List[str]:rtype: str"""res_str=""for str1 in dictionary:p1=0p2=0match_cnt=0s_len=len(s)str1_len=len(str1)while p1 < s_len and p2 < str1_len:if s[p1]==str1[p2]:match_cnt+=1p2+=1p1+=1if match_cnt==str1_len:if len(res_str)<str1_len:res_str=str1elif len(res_str)==str1_len:if res_str>str1:res_str=str1return res_str
相关文章:
算法随笔_23: 通过删除字母匹配到字典里最长单词
上一篇:算法随笔_22:数组中的k-diff对-CSDN博客 题目描述如下: 给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个,返回长度最长且字母序…...
ansible自动化运维实战--通过role远程部署nginx并配置(8)
文章目录 1、准备工作2、创建角色结构3、编写任务4、准备配置文件(金甲模板)5、编写变量6、编写处理程序7、编写剧本8、执行剧本Playbook9、验证-游览器访问每台主机的nginx页面 在 Ansible 中,使用角色(Role)来远程部…...
Python网络自动化运维---用户交互模块
文章目录 目录 文章目录 前言 实验环境准备 一.input函数 代码分段解析 二.getpass模块 前言 在前面的SSH模块章节中,我们都是将提供SSH服务的设备的账户/密码直接写入到python代码中,这样很容易导致账户/密码泄露,而使用Python中的用户交…...
计算机的错误计算(二百二十二)
摘要 利用大模型化简计算 实验表明,虽然结果正确,但是,大模型既绕了弯路,又有数值计算错误。 与前面相同,再利用同一个算式看看另外一个大模型的化简与计算能力。 例1. 化简计算摘要中算式。 下面是与一个大模型的…...
音频 PCM 格式 - raw data
文章目录 raw 音频格式:PCM其他音频格式:mp31. 无损压缩音频(类比 PNG 图像)2. 有损压缩音频(类比 JPEG 图像) 试了一下科大讯飞的音频识别云 api,踩了点坑 与本文无关:讯飞的 api 使…...
mybatis(78/134)
前天学了很多,关于java的反射机制,其实跳过了new对象,然后底层生成了字节码,创建了对应的编码。手搓了一遍源码,还是比较复杂的。 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE …...
连接 OpenAI 模型:基础操作
在这一部分中,我们将介绍如何连接 OpenAI 模型,设置 API 密钥,并使用 Spring AI 的 ChatClient 与 OpenAI 模型进行简单的对话。Spring AI 为集成 OpenAI 模型提供了方便的工具,使得开发者能够更轻松地与 GPT 系列模型进行交互。 …...
数据分箱 baggingboosting onehot独热编码 woe编码 sklearn的ensemble(集成学习)
目录 数据分箱就是将连续变量离散化。 bagging&boosting onehot独热编码 独热编码的结果如下: woe编码 WOE编码的基本原理 步骤一:计算WOE 步骤二:应用WOE WOE编码的优点 示例 数据示例 步骤一:计算每个类别的违约…...
企业微信开发010_使用WxJava企业微信开发框架_封装第三方应用企业微信开发003_并且实现多企业授权访问---企业微信开发012
继续来看吧,上一节,已经把config部分,代码都拿过来了: 并且把企业微信第三方应用开发部分,对应的config的配置,mutiltp 代码拿过来了,并且把yml中的配置也给出了. 然后,这里说一下config中的内容,到时候自己看也可以看懂 其实就是封装了,当系统启动,加载企微模块,这个时候,会…...
Office2021下载与安装保姆级教程【Office Tool Plus】
Office Tool Plus安装Office2021 下载Office Tool Plus安装OfficeⅠ. 清除旧版本Ⅱ. 配置安装参数Ⅲ. 安装许可证Ⅳ. 激发(JH)Office 本文介绍使用Office Tool Plus工具下载、安装、部署Office 2021全过程。 下载Office Tool Plus OfficeToolPlus是一个…...
salesforce公式字段 ISBLANK 函数和 <> NULL的区别
在 Salesforce 公式字段中,ISBLANK 函数和 <> NULL 的作用都可以用来检查字段是否有值,但它们的行为有一些显著的区别。以下是它们的详细对比和适用场景: 1. 基本区别 功能ISBLANK<> NULL主要作用检查字段是否为空(适…...
Unity在WebGL中拍照和录视频
原工程地址https://github.com/eangulee/UnityWebGLRecoder Unity版本2018.3.6f1,有点年久失修了 https://github.com/xue-fei/Unity.WebGLRecorder 修改jslib适配了Unity2021 效果图 录制的视频 Unity在WebGL中拍照和录视频...
AIGC时代下的Vue组件开发深度探索
文章目录 一、AIGC时代对Vue组件开发的深远影响二、Vue组件开发基础与最佳实践三、AIGC技术在Vue组件开发中的具体应用四、结论与展望 随着人工智能技术的飞速发展,AIGC(人工智能生成内容)时代已经悄然来临。在这个时代背景下,软件…...
【外文原版书阅读】《机器学习前置知识》1.线性代数的重要性,初识向量以及向量加法
目录 编辑 编辑 1.Chapter 2 Why Linear Algebra? 2.Chapter 3 What Is a Vector? 个人主页:Icomi 大家好,我是Icomi,本专栏是我阅读外文原版书《Before Machine Learning》对于文章中我认为能够增进线性代数与机器学习之间的理解的…...
Kafka运维宝典 (三)- Kafka 最大连接数超出限制问题、连接超时问题、消费者消费时间超过限制问题详细介绍
Kafka运维宝典 (三) 文章目录 Kafka运维宝典 (三)一、Kafka Broker 配置中的最大连接数超出限制问题1. 错误原因2. 相关 Kafka 配置参数2.1 connections.max2.2 max.connections.per.ip2.3 num.network.threads2.4 connections.ma…...
SpringBoot开发(二)Spring Boot项目构建、Bootstrap基础知识
1. Spring Boot项目构建 1.1. 简介 基于官方网站https://start.spring.io进行项目的创建. 1.1.1. 简介 Spring Boot是基于Spring4框架开发的全新框架,设计目的是简化搭建及开发过程,并不是对Spring功能上的增强,而是提供了一种快速使用Spr…...
【FISCO BCOS】二十四、通过Java SDK对FISCO BCOS进行压力测试
Java SDK Demo是基于Java SDK的基准测试集合,能够对FISCO BCOS节点进行压力测试。Java SDK Demo提供有合约编译功能,能够将Solidity合约文件转换成Java合约文件,此外还提供了针对转账合约、CRUD合约以及AMOP功能的压力测试示例程序。本篇我们来讲讲使用java SDK压力测试的操…...
【PyTorch】4.张量拼接操作
个人主页:Icomi 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术,能够处理复杂的数据模式。通过 PyTorch࿰…...
新电脑安装系统找不到硬盘原因和解决方法来了
有不少网友反馈新电脑采用官方u盘方式装win10或win100出现找不到硬盘是怎么回事?后来研究半天发现是bios中开启了rst(vmd)模式。如果关闭rst模式肯定是可以安装的,但这会影响硬盘性能,有没有办法解决开启rst模式的情况安装win10或win11呢&…...
Python3 【高阶函数】水平考试:30道精选试题和答案
Python3 【高阶函数】水平考试:30道精选试题和答案 试卷说明 本试卷包含:选择题:15 道、填空题:10 道和 编程题:5 道,总分 100 分。每道题后附有答案和解析。 高阶函数测试试卷 满分:100 分 …...
「 机器人 」仿生扑翼飞行器中的“被动旋转机制”概述
前言 在仿生扑翼飞行器的机翼设计中,模仿昆虫翼的被动旋转机制是一项关键技术。其核心思想在于:机翼旋转角度(攻角)并非完全通过主动伺服来控制,而是利用空气动力和惯性力的作用,自然地实现被动调节。以下对这种设计的背景、原理与优势进行详细说明。 1. 背景:昆虫的被动…...
Android GLSurfaceView 覆盖其它控件问题 (RK平台)
平台 涉及主控: RK3566 Android: 11/13 问题 在使用GLSurfaceView播放视频的过程中, 增加了一个播放控制面板, 覆盖在视频上方. 默认隐藏setVisibility(View.INVISIBLE);点击屏幕再显示出来. 然而, 在RK3566上这个简单的功能却无法正常工作. 通过缩小视频窗口可以看到, 实际…...
【C++】类和对象(五)
1、初始化列表 作用:C提供了初始化列表语法,用来初始化属性。 语法: 构造函数():属性1(值1),属性2(值2)...{}示例: #include<i…...
在win11下搭建ios开发环境
就是安装VMware,然后安装mac虚拟机。 主要参考了这一篇:windows上安装macOS系统虚拟机_windows安装macos虚拟机-CSDN博客 还参考了这一篇:【保姆级别教程】VMware虚拟机安装Mac OS15苹果系统附带【VMware TooLS安装】【解锁虚拟机】和【Mac…...
Maven的下载安装配置
maven的下载安装配置 maven是什么 Maven 是一个用于 Java 平台的 自动化构建工具,由 Apache 组织提供。它不仅可以用作包管理,还支持项目的开发、打包、测试及部署等一系列行为 Maven的核心功能 项目构建生命周期管理:Maven定义了项目构建…...
Mysql主从复制+MHA实验笔记[特殊字符]
目录 基本概念 工作原理 优势 环境准备:四台centos-其中三台mysql,一台MHA 配置一主两从 安装MHA 配置无密码认证 配置MHA 模拟master故障 基本概念 MySQL 主从复制:是 MySQL 数据库中实现数据冗余、数据备份和高可用性的重要技术手…...
vue3中自定一个组件并且能够用v-model对自定义组件进行数据的双向绑定
1. 基础用法 在 Vue3 中,v-model 在组件上的使用有了更灵活的方式。默认情况下,v-model 使用 modelValue 作为 prop,update:modelValue 作为事件。 1.1 基本示例 <!-- CustomInput.vue --> <template><input:value"mo…...
面向长文本的多模型协作摘要架构:多LLM文本摘要方法
多LLM摘要框架在每轮对话中包含两个基本步骤:生成和评估。这些步骤在多LLM分散式摘要和集中式摘要中有所不同。在两种策略中,k个不同的LLM都会生成多样化的文本摘要。然而在评估阶段,多LLM集中式摘要方法使用单个LLM来评估摘要并选择最佳摘要,而分散式多LLM摘要则使用k个LLM进行…...
Python中容器类型的数据(上)
若我们想将多个数据打包并且统一管理,应该怎么办? Python内置的数据类型如序列(列表、元组等)、集合和字典等可以容纳多项数据,我们称它们为容器类型的数据。 序列 序列 (sequence) 是一种可迭代的、元素有序的容器类型的数据。 序列包括列表 (list)…...
Spring MVC中HandlerInterceptor和Filter的区别
目录 一、处理阶段 二、功能范围 三、参数访问 四、配置方式 五、使用场景说明 在Spring MVC中,HandlerInterceptor和Filter都是用于拦截请求的重要组件,但它们在多个方面存在显著的差异。本文将详细解析这两种拦截机制的区别,并结合使用…...
