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

DeepSeek LeetCode 2573. 找出对应 LCP 矩阵的字符串 Java实现

这道题要求根据 LCP (最长公共前缀) 矩阵还原出一个由小写字母组成的字符串。解题思路1. 理解 LCP 矩阵性质· LCP[i][j] 表示字符串第 i 个字符和第 j 个字符开头后缀的最长公共前缀长度· 对角线一定是字符串长度· 矩阵对称· 若 LCP[i][j] 0则 s[i] s[j]2. 构造策略· 贪心分配字母从第一个字符开始如果某个位置未赋值尽可能赋最小的可行字母· 验证构造的字符串是否满足 LCP 矩阵Java 实现javaclass Solution {public String findTheString(int[][] LCP) {int n LCP.length;char[] s new char[n];// 贪心构造字符串char currentChar a;for (int i 0; i n; i) {if (s[i] 0) { // 未赋值if (currentChar z) {return ; // 需要超过26个字母不可能}// 给所有与 i 有相同字符的位置赋值for (int j i; j n; j) {if (LCP[i][j] 0) {s[j] currentChar;}}currentChar;}}// 验证构造的字符串是否满足 LCP 矩阵for (int i 0; i n; i) {for (int j 0; j n; j) {int expected LCP[i][j];int actual computeLCP(s, i, j, n);if (expected ! actual) {return ;}}}return new String(s);}private int computeLCP(char[] s, int i, int j, int n) {if (i j) return n - i;if (s[i] ! s[j]) return 0;int len 0;while (i len n j len n s[i len] s[j len]) {len;}return len;}}优化验证方法上面的验证方法 O(n³)可以优化到 O(n²)javaclass Solution {public String findTheString(int[][] LCP) {int n LCP.length;char[] s new char[n];// 第一步贪心构造char currentChar a;for (int i 0; i n; i) {if (s[i] 0) {if (currentChar z) return ;for (int j i; j n; j) {if (LCP[i][j] 0) {s[j] currentChar;}}currentChar;}}// 第二步O(n²) 验证// 验证 LCP[i][j] 和字符相等关系的一致性for (int i 0; i n; i) {for (int j 0; j n; j) {if (i j) {if (LCP[i][j] ! n - i) return ;} else {if (LCP[i][j] ! LCP[j][i]) return ;if (LCP[i][j] n - Math.max(i, j)) return ;if (s[i] ! s[j]) {if (LCP[i][j] ! 0) return ;} else {if (i 1 n j 1 n) {if (LCP[i][j] ! 1 LCP[i 1][j 1]) return ;} else {if (LCP[i][j] ! 1) return ;}}}}}return new String(s);}}核心要点1. 正确性利用 LCP 矩阵的性质如果 LCP[i][j] 0则 s[i] s[j]可以用这个条件将字符分组2. 贪心赋值按顺序给每个未赋值的组分配最小的可用字母3. 验证必须验证构造的字符串是否完全满足 LCP 矩阵因为 LCP[i][j] 0 只是必要条件不是充分条件4. 时间复杂度构造 O(n²)验证 O(n²)总体 O(n²)
http://www.zskr.cn/news/1363170.html

相关文章:

  • 如何快速掌握贴吧Lite:终极轻量级贴吧体验完整指南
  • PXE安装麒麟Kylin后,我用这个脚本搞定了软件源、远程桌面和sudo免密
  • 解读《重大火灾隐患判定规则》GB35181-PPT
  • AI Agent翻译不是替代译员,而是重定义交付标准:7类高价值任务迁移清单(含SLA量化模板)
  • 统信UOS/麒麟KYLINOS用户看过来:除了Termius,这款开源免费的SSH工具electerm更香吗?
  • .NET Framework 4.7.2 TLS 1.3 兼容性故障排查与修复
  • FlexNet浮动许可证手动归还操作指南
  • 移动端事件相机实时手势识别:TFLite加速与功耗优化实践
  • 用Python+OpenCV复现DWT-DCT-SVD图像水印:从原理到代码的保姆级实战
  • μVision调试器中高效模拟硬件中断的技术方案
  • 超低功耗A-IoT接收器设计与晶体振荡器替代方案
  • 告别手动标注!用SAM+Python脚本,5分钟批量生成你的专属分割数据集
  • 保姆级教程:用Python+Mediapipe+OpenCV实现手势识别(附完整代码与FPS优化)
  • CANN 模型安全与隐私保护:推理服务的全方位防护方案
  • 保姆级解读:Linux 6.8.8内核中NVMe控制器寄存器的初始化与避坑指南
  • 2026年4月螺母供应商口碑分析,字槽伞头螺丝/螺母/双牙长方型T帽/字槽圆头自攻尖尾螺钉,螺母厂家口碑推荐 - 品牌推荐师
  • 保姆级教程:手把手教你下载和配置COCO 2017数据集(附Python脚本)
  • 基于贝叶斯优化与计算机视觉的机器人自动化饮料配方研发系统
  • 从一次Kaggle比赛复盘说起:我们是如何处理‘脏数据’并避免ValueError的
  • ARCADE:用AR交互评估弥合CV模型指标与感知的鸿沟
  • 机器学习如何重塑材料研发:从数据孤岛到智能设计平台
  • Ubuntu20.04深度学习环境搭建避坑实录:从显卡驱动到TensorRT,我踩过的雷你别踩
  • 别再只盯着准确率了!手把手教你用Dice、IOU、Kappa给医学图像分割模型打分(附代码)
  • 1980年代初 IBM克隆基尔代尔的BIOS 真是吗
  • 机器学习壁模型在湍流模拟中的应用:原理、性能与工程实践
  • 大模型推理优化:动态KV缓存重计算策略的工程实践
  • 开屏广告变现平台排行:APP广告收益提升、APP广告素材合规、APP想接入广告、APP流量变现、SDK变现、开屏广告变现选择指南 - 优质品牌商家
  • ReFS文件系统数据恢复实战:对比DiskGenius,为什么refsutil在Server 2019上更靠谱?
  • Lovable移动端体验跃迁指南(2024年iOS/Android双平台实测数据验证)
  • 多中心医学影像机器学习中ComBat数据协调的数据泄漏陷阱与解决方案