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

Kimi LeetCode 3563. 移除相邻字符后字典序最小的字符串 TypeScript实现

以下是 LeetCode 3563 移除相邻字符后字典序最小的字符串 的 TypeScript 实现。

核心思路

与 Rust 实现相同的区间 DP 策略,利用一个二维 DP 表同时解决「能否删空」和「最小字典序」两个问题:

- `dp[i][j]` 表示子串 `s[i..j)`(左闭右开区间)经过若干次操作后能得到的字典序最小字符串。
- 若 `dp[i+1][k] === ""`,说明 `s[i+1..k]` 可被完全删空,此时 `s[i]` 与 `s[k]` 变为相邻。若它们还是循环字母表中的连续字符(如 `'a'` 与 `'z'`),则二者可一并删除,结果为 `dp[k+1][j]`。
- 对每个区间,要么保留 `s[i]`,要么尝试删除 `s[i]`,取字典序最小者。

时间复杂度 O(n^3),空间复杂度 O(n^2),对于 n \le 250 完全可接受。

```typescript
function lexicographicallySmallestString(s: string): string {
const n = s.length;
const sArr = s.split('');

// dp[i][j] = 子串 s[i..j) 能得到的字典序最小字符串
const dp: string[][] = Array.from({ length: n + 1 }, () => Array(n + 1).fill(''));

// 按区间长度从小到大填表
for (let d = 1; d <= n; d++) {
for (let i = 0; i <= n - d; i++) {
const j = i + d;

// 选项1:保留 s[i]
let best = sArr[i] + dp[i + 1][j];

// 选项2:尝试将 s[i] 与某个 s[k] 配对删除
// 要求 s[i+1..k] 能完全删空(dp[i+1][k] === '')
// 且 s[i] 与 s[k] 在循环字母表中相邻
for (let k = i + 1; k < j; k++) {
if (isConsecutive(sArr[i], sArr[k]) && dp[i + 1][k] === '') {
const candidate = dp[k + 1][j];
if (candidate < best) {
best = candidate;
}
}
}

dp[i][j] = best;
}
}

return dp[0][n];
}

// 判断两个字符在循环字母表中是否相邻
// 'a'-'b', 'b'-'a', 'a'-'z', 'z'-'a' 均视为相邻
function isConsecutive(a: string, b: string): boolean {
const codeA = a.charCodeAt(0);
const codeB = b.charCodeAt(0);
const diff = Math.abs(codeA - codeB);
return diff === 1 || diff === 25;
}
```

验证示例

输入 输出 说明
`"abc"` `"a"` 删除 `"bc"`,保留 `"a"`
`"bcda"` `""` 删除 `"cd"` 得 `"ba"`,再删除 `"ba"` 得空串
`"zdce"` `"zdce"` 删除 `"dc"` 得 `"ze"`,但 `"zdce"` 字典序比 `"ze"` 更小,故不删
`"az"` `""` `'a'` 与 `'z'` 循环相邻,可直接删除

http://www.jsqmd.com/news/1190677/

相关文章:

  • (2026最新)南昌漏水检测维修师傅上门-正规防水补漏公司本地居民实测推荐五家-卫生间/屋顶/厨房/阳台/外墙/地下室专业仪器精准检测漏水点 - 安佳防水
  • 终极指南:如何用Python工具3分钟批量下载微博高清图片
  • 帝舵中国官方售后服务中心|官方热线和维修地址权威信息通告(2026年7月更新) - 帝舵中国官方服务中心
  • 从抖动、游走到MTIE与TDEV:深入解析时频测量核心指标
  • Python进阶项目实战:10个生产级知识增强路径
  • 《Solar Energy》期刊投稿指南:从光伏材料到电网整合的SCI 2区发文全解析
  • CAN总线ACK缺失:从协议原理到故障排查的深度解析
  • 暗黑破坏神2角色编辑器:从存档解密到角色重塑的艺术之旅
  • 2026年 PCB设计与制造一站式源头厂家指南:聚焦Linux、安卓、人机交互与多行业定制方案 - 甄选服务推荐
  • FPGA时序约束实战:建立与保持时间违例的深度分析与修复策略
  • 运营运维:一体化数字资源系统(IRS)的“数字超市”与“智能工厂”双轮驱动
  • SD-PPP:3个步骤让Photoshop秒变AI绘画神器
  • 科研能力的五个可观察行为刻度
  • Agent评估基准-τ-bench-SWE-bench与轨迹评估
  • 8个SaaS客户教育创意:有效降低客户流失率
  • 终极指南:如何为Axure RP安装免费中文语言包,让原型设计更简单!
  • R语言实现债券现金流贴现定价:从原理到可复用函数
  • 2026年7月最新厦门爱彼官方售后客服中心地址电话及服务网点分布 - 爱彼中国官方服务中心
  • 2026年全自动咖啡机选哪家?看这篇就够了 - 品牌排行榜
  • 2026年7月最新重庆萧邦官方售后客服电话及服务网点地址查询 - 萧邦中国官方服务中心
  • 数据安全审计实践:从合规驱动到风险导向的体系化建设
  • 服务器CCC认证详解:国内市场准入的合规要求与认证流程
  • 第一章 无人机入门(一)硬件架构:从核心部件到系统协同
  • Vivado时序约束实战:从Constraints Wizard到XDC文件全流程解析
  • 企业AI能力体系构建:不是多上几个AI应用那么简单
  • 从零到一:STM32最小系统板原理图与PCB设计实战解析
  • 数字音乐版权保护与用户自主权:Unlock-Music 技术解决方案
  • 抖音下载器完全指南:从零开始构建你的智能内容管理平台
  • 10个穿透Python本质的工程化项目:从脚本到系统思维
  • DRA79x SoC硬件设计:电源、时钟与引脚配置的工程实践指南