Leetcode 3474. Lexicographically Smallest Generated String

  • Leetcode 3474. Lexicographically Smallest Generated String
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3474. Lexicographically Smallest Generated String

1. 解题思路

这一题思路上主要就是分成两步:

  1. 找到所有为T的位置,此时其对应的位置及其后续m-1个字符必然就是str2
  2. 在所有未填的字符当中填入其他字符使其在满足条件的情况下字典序最小

其中,有关第一步,我们需要保证我们在填入本身的合法性,因此我们需要在填入位置重叠的情况下判断填入的合法性,即交错的部分必须完全一致,此时我们就是要判断对应位置的子串是否与头部位置的子串完全重合。这个我们可以轻松地通过z算法进行实现,对应的内容可以参考拙作《经典算法:Z算法(z algorithm)》,这里我们就不过度展开了。

另外,关于第二步,我们只需要考察在每一个未填的位置可以填入最小字符a即可,这样,我们就可以确保对应的字符串合法且字典序最小。

而要判断某个位置是否可以填入某个字符,这里我做的比较暴力,即考察包含其本身的前m个字符分别作为开头时是否刚好有某个子串恰好为str2,如果没有就是合法的,反之就必然不合法。

最后需要注意的是,我们还需要考察一下每一个F所在的位置对应的子串是否真的都不合法,它有时会和第一步产生矛盾,此时我们需要去掉对应的情况。

2. 代码实现

给出python代码实现如下:

def z_algorithm(s):n = len(s)z = [0 for _ in range(n)]l, r = -1, -1for i in range(1, n):if i > r:l, r = i, iwhile r < n and s[r-l] == s[r]:r += 1z[i] = r-lr -= 1else:k = i - lif z[k] < r - i + 1:z[i] = z[k]else:l = iwhile r < n and s[r-l] == s[r]:r += 1z[i] = r-lr -= 1z[0] = nreturn zclass Solution:def generateString(self, str1: str, str2: str) -> str:n, m = len(str1), len(str2)z = z_algorithm(str2 + str2)[m:]ans = ["" for _ in range(n+m-1)]nxtT = nfor i in range(n-1, -1, -1):ch = str1[i]if ch == "T":if nxtT == n or nxtT-i >= m:for j in range(i, i+m):ans[j] = str2[j-i]elif z[nxtT-i] >= m-(nxtT-i):for j in range(i, nxtT):ans[j] = str2[j-i]else:return ""nxtT = idef is_allowed(idx, ch):lb = max(idx-m+1, 0)rb = min(n-1, idx)def is_not_same(i):return str2[idx-i] != ch or any(ans[i+j] != str2[j] for j in range(m) if i+j != idx)return all(is_not_same(i) for i in range(lb, rb+1))prefix = str2[:-1]for i in range(n+m-1):if ans[i] != "":if i < n and str1[i] == "F" and all(ans[i+j] == str2[j] for j in range(m)):return ""continuefor ch in string.ascii_lowercase:if is_allowed(i, ch):ans[i] = chbreakreturn "".join(ans)

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI论文】ViDoRAG:通过动态迭代推理代理实现视觉文档检索增强生成

摘要&#xff1a;理解富含视觉信息的文档中的信息&#xff0c;对于传统的检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;RAG&#xff09;方法来说&#xff0c;仍然是一个重大挑战。现有的基准测试主要集中在基于图像的问答&#xff08;Question Answerin…

【赵渝强老师】监控Redis

对运行状态的Redis实例进行监控是运维管理中非常重要的内容&#xff0c;包括&#xff1a;监控Redis的内存、监控Redis的吞吐量、监控Redis的运行时信息和监控Redis的延时。通过Redis提供的监控命令便能非常方便地实现对各项指标的监控。 一、监控Redis的内存 视频讲解如下 【…

HTML前端手册

HTML前端手册 记录前端框架在使用过程中遇到的各种问题和解决方案&#xff0c;供后续快速进行手册翻阅使用 文章目录 HTML前端手册1-前端框架1-TypeScript框架2-CSS框架 2-前端Demo1-Html常用代码 2-知云接力3-Live2D平面动画 3-前端运维1-NPM版本管理 1-前端框架 1-TypeScrip…

C++:类和对象(下篇)

1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _year;int _mont…

JVM基本概念及内存管理模型

一、JVM基本概念 JVM&#xff08;Java Virtual Machine&#xff0c;Java 虚拟机&#xff09;是 Java 程序运行的核心组件。它负责将 Java 字节码转换为特定平台的机器指令&#xff0c;并提供内存管理、垃圾回收、安全性等功能。JVM 的主要功能包括以下&#xff1a; 加载和执行…

MyBatis - 单元测试 参数传递 注解 CRUD

目录 1. MyBatis 简介 2. 简单使用 MyBatis 2.1 创建 MyBatis 项目 2.2 连接数据库 2.3 创建 Java 类 2.4 创建 Mapper 接口 2.5 在测试类中执行 3. 单元测试 3.1 Test 3.2 SpringBootTest 3.3 BeforeEach / AfterEach 4. MyBatis 基础操作 4.1 配置 MyBatis 打印日…

大语言模型学习--本地部署DeepSeek

本地部署一个DeepSeek大语言模型 研究学习一下。 本地快速部署大模型的一个工具 先根据操作系统版本下载Ollama客户端 1.Ollama安装 ollama是一个开源的大型语言模型&#xff08;LLM&#xff09;本地化部署与管理工具&#xff0c;旨在简化在本地计算机上运行和管理大语言模型…

shell文本处理

shell文本处理 一、grep ​ 过滤来自一个文件或标准输入匹配模式内容。除了 grep 外&#xff0c;还有 egrep、fgrep。egrep 是 grep 的扩展&#xff0c;相当于 grep -E。fgrep 相当于 grep -f&#xff0c;用的比较少。 用法 grep [OPTION]... PATTERN [FILE]...支持的正则描述…

Linux中死锁问题的探讨

在 Linux 中&#xff0c;死锁&#xff08;Deadlock&#xff09; 是指多个进程或线程因为竞争资源而相互等待&#xff0c;导致所有相关进程或线程都无法继续执行的状态。死锁是一种严重的系统问题&#xff0c;会导致系统资源浪费&#xff0c;甚至系统崩溃。 死锁的定义 死锁是指…

Baklib内容中台赋能企业智管

内容中台构建全场景智管 现代企业数字化运营中&#xff0c;全域内容管理能力已成为核心竞争力。通过智能知识引擎驱动的内容中台架构&#xff0c;企业能够实现跨部门、多形态数据的统一归集与动态调度。以某制造企业为例&#xff0c;其利用中台系统将分散在CRM、ERP及内部文档…

ArcGIS Pro高级应用:高效生成TIN地形模型

一、引言 在地理信息科学与遥感技术的快速发展背景下&#xff0c;数字高程模型&#xff08;DEM&#xff09;已成为地形表达与分析的关键工具。 三角网&#xff08;TIN&#xff09;作为DEM的一种重要形式&#xff0c;因其能够精准描绘复杂地形特征而广受青睐。 ArcGIS Pro为用…

leetcode112-路径总和

leetcode 112 思路 我们利用递归来实现&#xff0c;用result字段来记录结果值&#xff0c;默认为false&#xff0c;我们递归的时候传入需要的目标值&#xff0c;然后每次遍历到一个节点&#xff0c;就用目标值减去节点当前值&#xff0c;最终到叶子节点时&#xff0c;如果是…

LLM | 论文精读 | CVPR | PEACE : 通过多模态大语言模型(MLLMs)赋能地质图全面理解

论文标题&#xff1a;FairCLIP: Harnessing Fairness in Vision-Language Learning 作者&#xff1a;Yan Luo Min Shi Muhammad Osama Khan Muhammad Muneeb Afzal等 期刊&#xff1a;CVPR 2025 email&#xff1a;yuhan.huangwhu.edu.cn 创作不易&#xff0c;恳请大家点赞收…

网络学习(四)HTTPS中,SSL的单向认证与双向认证

目录 一、什么是SSL&#xff1f;1.1 SSL 的主要功能1.2 SSL 的工作原理1.3 SSL 的核心组件1.4 SSL 的应用场景1.5 SSL 与 TLS 的区别 二、SSL 单向认证、双向认证2.1 SSL 单向认证2.2 SSL 双向认证2.3 总结&#xff1a;SSL 单向认证和双向认证的区别 一、什么是SSL&#xff1f;…

Mybatis 中#{} 和${} 的区别是什么?

在 MyBatis 中&#xff0c;#{} 和 ${} 都是用于动态 SQL 语句中的占位符&#xff0c;但是它们的作用和使用方式是不同的。下面是它们的区别&#xff1a; 1. #{} —— 用于防止 SQL 注入和自动类型处理 #{} 是用来将参数安全地传递到 SQL 语句中&#xff0c;它会将传递的参数值…

HTML-05NPM使用踩坑

2025-03-04-NPM使用踩坑 本文讲述了一个苦逼程序员在使用NPM的时候突然来了一记nmp login天雷&#xff0c;然后一番折腾之后&#xff0c;终究还是没有解决npm的问题&#x1f61e;&#x1f61e;&#x1f61e;,最终使用cnpm完美解决的故事。 文章目录 2025-03-04-NPM使用踩坑[toc…

Zookeeper 的核心引擎:深入解析 ZAB 协议

#作者&#xff1a;张桐瑞 文章目录 前言ZAB 协议算法崩溃恢复选票结构选票筛选消息广播 前言 ZooKeeper 最核心的作用就是保证分布式系统的数据一致性&#xff0c;而无论是处理来自客户端的会话请求时&#xff0c;还是集群 Leader 节点发生重新选举时&#xff0c;都会产生数据…

C++ Primer 动态数组

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

基于 HTML、CSS 和 JavaScript 的智能九宫格图片分割系统

目录 1 前言 2 技术实现 2.1 HTML 结构 2.2 CSS 样式 2.3 JavaScript 交互 3 代码解析 3.1 HTML 部分 3.2 CSS 部分 3.3 JavaScript 部分 4 完整代码 5 运行结果 6 总结 6.1 系统特点 6.2 使用方法 1 前言 在当今数字化的时代&#xff0c;图片处理需求日益增长。…

Java+iTextPDF,实时生成与预览PDF文件的最佳实践!

Java+iTextPDF,实时生成与预览PDF文件的最佳实践! 背景 其实公司之前的项目里是用到了帆软报表的,然而最近接了一个新项目,这个项目独立部署在甲方的独立环境中,组长的意思是不用再单独部署一套帆软报表,成本太大,用其他方式实现一下。虽然我不太理解成本大在哪儿,不…