Leetcode 3474. Lexicographically Smallest Generated String

embedded/2025/3/5 8:00:01/
  • 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.ppmy.cn/embedded/170130.html

相关文章

大模型在高血压预测及围手术期管理中的应用研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 国内外研究现状 二、大模型预测高血压的原理与方法 2.1 常用大模型介绍 2.2 数据收集与预处理 2.3 模型训练与验证 三、术前风险预测与手术方案制定 3.1 术前风险因素分析 3.2 大模型预测术前风险的方法与结果 …

HSPF 水文模型建模方法与案例分析实践技术应用

在水文模拟领域&#xff0c;HSPF 模型&#xff08;Hydrological Simulation Program Fortran&#xff09;与 SWAT 模型一样&#xff0c;都是备受瞩目的水文模型软件。HSPF 模型因其强大的功能和简便的操作&#xff0c;在全球范围内得到了广泛应用。该模型不仅能够在缺乏测量数据…

【FSM-3: 串行序列】

FSM-3&#xff1a;串行序列 1 Serial receiver FSM使用总结&#xff1a; 所有涉及输出的driver原则上用cur_sta&#xff1b;若是使用nxt_sta的相当于是提前一拍知道结果&#xff0c;所以对于输出必须要使用clocked reg&#xff0c;这样才能和cur_sta对应起来&#xff1b;描述声…

[python] del

在Python中&#xff0c; del 语句用于删除对象的引用、删除列表中的元素、删除字典中的键值对、删除类的属性等&#xff0c;以下是一些应用场景示例&#xff1a; 删除变量 python x 10 del x 上述代码删除了变量 x &#xff0c;之后再访问 x 会报错&#xff0c;因为它已从内…

通俗的方式解释“零钱兑换”问题

“零钱兑换”是一道经典的算法题目&#xff0c;其主要问题是&#xff1a;给定不同面额的硬币和一个总金额&#xff0c;求出凑成总金额所需的最少硬币个数。如果没有任何一种硬币组合能组成总金额&#xff0c;返回-1。 解题思路 动态规划&#xff1a;使用动态规划是解决零钱兑…

LLM参数高效微调技术 PRFT

LLM参数高效微调技术 1. LoRA(Low-Rank Adaptation) 原理:在预训练模型的基础上,通过在Transformer层的权重矩阵上添加低秩分解矩阵来实现微调。不改变原模型的参数,只训练低秩矩阵,从而大大减少了需要训练的参数数量。优点:减少内存占用和计算量,训练速度快,可在较小…

AI入门7:基于Ollama+DeepSeek+Dify搭建本地知识库

书接上篇&#xff1a;分别使用Page Assist、AnythingLLM和RAGFlow接入deepseek模型&#xff0c;并上传及分析本地知识&#xff1a;&#xff1a; AI入门&#xff1a;AI模型管家婆ollama的安装和使用-CSDN博客 AI入门2&#xff1a;本地AI部署&#xff0c;用ollama部署deepseek&…

Android Studio 的详细安装步骤,适用于 Windows/macOS/Linux 系统

以下是 Android Studio 的详细安装步骤&#xff0c;适用于 Windows/macOS/Linux 系统&#xff1a; Android Studio 的详细安装步骤 一、准备工作1. 系统要求&#xff1a;2. 下载 Android SDK&#xff1a; 二、安装步骤Windows 系统1. 下载安装包&#xff1a;2. 运行安装程序&am…