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

Leetcode 3302. Find the Lexicographically Smallest Valid Sequence

  • Leetcode 3302. Find the Lexicographically Smallest Valid Sequence
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3302. Find the Lexicographically Smallest Valid Sequence

1. 解题思路

这一题的话由于至多只能够修改一个字符,因此,我们就是要考察每一个字符前正向的最大公共子序列的长度和其后方的从后往前的最大公共子序列的长度。如果两者相加不小于目标目标字符串word2的长度减一,即表示调整当前位置上的字符的话即可获得一个子串使之与目标字符串word2相同。

然后,我们定位到第一个满足上述条件的位置,通过调整该位置获得的字符串就是最优的选项。

最后,我们找到调整该位置所能够获得字符串的index即可。

2. 代码实现

给出python代码实现如下:

class Solution:def validSequence(self, word1: str, word2: str) -> List[int]:n, m = len(word1), len(word2)if m == 1:return [0]# prefixprefix = [0 for _ in word1]i, j = 0, 0while j < m:while i < n and word1[i] != word2[j]:prefix[i] = ji += 1if i >= n:breakj += 1prefix[i] = ji += 1while i < n:prefix[i] = ji += 1# suffixi, j = n-1, m-1suffix = [0 for _ in word1]while j >= 0:while i >= 0 and word1[i] != word2[j]:suffix[i] = m-1-ji -= 1if i < 0:breakj -= 1suffix[i] = m-1-ji -= 1while i >= 0:suffix[i] = m-1-ji -= 1# find target idxidx = -1if word1[0] != word2[0] and suffix[1] >= m-1:idx = 0else:for i in range(1, n-1):if prefix[i-1] + suffix[i+1] >= m-1 and prefix[i] != prefix[i-1]+1:idx = ibreakif idx == -1 and prefix[n-2] >= m-1:idx = n-1# get all the indexif idx == -1:return []i, j = 0, 0ans = []while j < m:while i < idx and word1[i] != word2[j]:i += 1if i >= idx:breakans.append(i)j += 1i += 1if j < m:ans.append(i)i += 1j += 1while j < m:while i < n and word1[i] != word2[j]:i += 1if i >= n:breakans.append(i)j += 1i += 1return ans

提交代码评测得到:耗时1200ms,占用内存55.7MB。

相关文章:

  • 数据库中的表添加uuid字段
  • spring 实用小技巧
  • 编程题 7-12 两个数的简单计算器【PAT】
  • Linux:磁盘管理
  • ps aux | grep smart_webrtc这条指令代表什么意思
  • SQLite3模块使用详解
  • 【Android 14源码分析】Activity启动流程-1
  • 大数据复习知识点5
  • linux服务器部署filebeat
  • [Everything] 文件搜索工具的下载及详细安装使用过程(附有下载文件)
  • Hadoop三大组件之HDFS(一)
  • 在树莓派上部署开源监控系统 ZoneMinder
  • 基于php的幸运舞蹈课程工作室管理系统
  • 黑名单与ip禁令是同一个东西吗
  • Android开发中的ViewModel
  • 《剑指offer》分解让复杂问题更简单
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • ES6--对象的扩展
  • java第三方包学习之lombok
  • Js基础知识(一) - 变量
  • Spring声明式事务管理之一:五大属性分析
  • use Google search engine
  • 阿里云前端周刊 - 第 26 期
  • 分布式事物理论与实践
  • 高度不固定时垂直居中
  • 如何正确配置 Ubuntu 14.04 服务器?
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #Linux(Source Insight安装及工程建立)
  • #mysql 8.0 踩坑日记
  • (13)Hive调优——动态分区导致的小文件问题
  • (2)STM32单片机上位机
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (三) diretfbrc详解
  • (十六)一篇文章学会Java的常用API
  • (一)Docker基本介绍
  • **python多态
  • .md即markdown文件的基本常用编写语法
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @private @protected @public
  • [ C++ ] STL---仿函数与priority_queue
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [AutoSar NVM] 存储架构
  • [c#基础]DataTable的Select方法
  • [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
  • [CentOs7]iptables防火墙安装与设置
  • [cocos creator]EditBox,editing-return事件,清空输入框
  • [codevs] 1029 遍历问题
  • [Editor]Unity Editor类常用方法
  • [FC][常见Mapper IRQ研究]
  • [GXYCTF2019]禁止套娃