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

智谱清言 LeetCode 2573. 找出对应 LCP 矩阵的字符串 Python3实现

LeetCode 2573. 找出对应 LCP 矩阵的字符串思路分析LCP 矩阵定义lcp[i][j] 表示字符串 s 从位置 i 和位置 j 开始的最长公共前缀长度。核心观察LCP 矩阵具有递推性质若 lcp[i][j] 0则 lcp[i1][j1] lcp[i][j] - 1因为去掉首字符后公共前缀长度减1若 s[i] s[j]则 lcp[i][j] lcp[i1][j1] 1否则 lcp[i][j] 0算法步骤验证检查 lcp 矩阵的对称性、对角线值、递推关系是否满足构造从后往前利用 lcp[i][j] 0 ⇒ s[i] s[j] 来等价分组贪心赋最小字符校验用构造出的字符串重新计算 LCP 矩阵与输入比对Python3 实现class Solution:def findTheString(self, lcp: List[List[int]]) - str:n len(lcp)# 第一步验证 LCP 矩阵的基本性质 for i in range(n):for j in range(n):# 对角线上 lcp[i][i] n - iif i j and lcp[i][i] ! n - i:return “”# 矩阵必须对称if lcp[i][j] ! lcp[j][i]:return “”# lcp 值不能越界if lcp[i][j] n - max(i, j):return “”# 递推性质lcp[i][j] 0 时lcp[i1][j1] lcp[i][j] - 1if i n - 1 and j n - 1:if lcp[i][j] 0 and lcp[i 1][j 1] ! lcp[i][j] - 1:return “”# 第二步贪心构造字典序最小的字符串 # 核心关系lcp[i][j] 0 ⟹ s[i] s[j]# 用并查集或直接标记将 s[i] s[j] 的位置分组s [‘’] * nc ord(‘a’) # 当前可用的最小字符for i in range(n):if s[i]: # 已被前面的位置标记过continueif c ord(‘z’): # 超出 26 个字母无法构造return “”# 将所有与 i 应该相同的字符位置标记为同一字符s[i] chr©for j in range(i 1, n):if not s[j] and lcp[i][j] 0:s[j] chr©c 1 # 下一个位置用下一个字母result ‘’.join(s)# 第三步用构造的字符串重新计算 LCP验证一致性 # 从右下角向左上角递推计算dp [[0] * n for _ in range(n)]for i in range(n - 1, -1, -1):for j in range(n - 1, -1, -1):if result[i] result[j]:dp[i][j] (1 dp[i 1][j 1]) if (i n - 1 and j n - 1) else 1else:dp[i][j] 0for i in range(n):for j in range(n):if dp[i][j] ! lcp[i][j]:return “”return result关键点解释步骤 说明性质验证 检查对称性 lcp[i][j]lcp[j][i]、对角线 lcp[i][i]n-i、递推 lcp[i1][j1]lcp[i][j]-1 (当lcp[i][j]0)、边界 lcp[i][j]n-max(i,j)贪心构造 遍历每个位置 i若未赋值则分配当前最小字符 c然后将所有 lcp[i][j]0 的位置 j 也赋为 c因为 lcp[i][j]0 ⟹ s[i]s[j]一致性校验 用构造出的字符串重新递推计算 LCP 矩阵与输入比对——这一步捕获该不等但 lcp0的反例例如 lcp[0][1]0 但构造出 s[0]s[1]‘a’复杂度时间O(n²) — 三次遍历 n×n 矩阵空间O(n²) — 存储验证用的 dp 矩阵
http://www.zskr.cn/news/1362891.html

相关文章:

  • 2026企业数字化转型:从规则脚本到实在Agent智能体进化全解析
  • 信息安全工程师-移动应用安全核心知识体系与备考指南
  • 信息安全工程师-工控安全产品体系与行业实践全解析
  • WOFOST模型参数太多看不懂?这份保姆级解读指南帮你从入门到精通
  • 量子计算在蛋白质折叠问题中的应用与BF-DCQO算法解析
  • ThinkPad装Win10总报错?别急着找驱动,先试试换个USB口(亲测E540有效)
  • Windows软件清单采集:注册表+WMI+PackageManager三源协同实战
  • CVE-2024-38819漏洞复现:Tomcat 10.1.22 JNDI注入完整验证指南
  • 差分隐私矩阵机制与FFT优化:保护多轮迭代计算的高效方法
  • C#实现自动化创建Word可填写表单
  • 告别卡顿!用Sunshine在Linux上搭建低延迟远程桌面,平板秒变移动工作站
  • 2026Q2成都鑫达嘉丰保温技术服务对接实操全指南:成都鑫达嘉丰保温材料有限公司联系/防水基层板厂家/防水背衬板批发/选择指南 - 优质品牌商家
  • Win10离线安装.net 3.5终极指南:巧用DISM命令,告别0x800f081f错误
  • UE5.3与VS2022编译配置深度优化指南
  • CSS Web安全字体
  • 告别TeamViewer!在Ubuntu 22.04上安装向日葵远程控制的保姆级教程(附依赖问题解决)
  • 机器人视觉与贝叶斯优化实现粉末冲调自动化
  • 语音AI家庭部署实战:从实验室到真实环境的预评估与工程化指南
  • Windows下跑深度学习模型,遇到‘页面文件太小’报错?别急着加内存条,先试试这个D盘虚拟内存设置(保姆级图文)
  • 8051开发中PDATA内存优化使用指南
  • 基于k-可加Choquet积分的SHAP值高效近似与特征交互分析
  • 2026基酒择优技术分享:浓香型酒体设计/白酒代理加盟品牌/白酒体验馆加盟/白酒批发厂家/缺陷酒修复/苦味酒处理/选择指南 - 优质品牌商家
  • 不用pip install -e也能搞定Vision Mamba训练:我的CIFAR-100快速测试与whl文件安装指南
  • 在WSL2的Ubuntu 22.04上,用Intel OneAPI 2024完整配置VASP 6.3.2计算环境
  • Mac新手必看:绕过‘无法验证开发者’弹窗的3种安全方法(含终端命令详解)
  • 机器学习预测钙钛矿薄膜应变弛豫:从稀疏数据挖掘三维弹性耦合机制
  • Unity弓箭抛物线弹道实现:手动物理积分与实时预览
  • EasyMLServe:一键部署机器学习模型,自动生成REST API与GUI界面
  • 机器学习优化算法在激光等离子体加速实验中的应用与选型指南
  • Frida hook so层解析protobuf二进制数据实战指南