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

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

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

核心思路

这道题使用区间 DP 巧妙地将「能否删空」和「最小字典序」两个子问题合并到一个 DP 表中:

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

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

```rust
impl Solution {
pub fn lexicographically_smallest_string(s: String) -> String {
let n = s.len();
let s_bytes = s.as_bytes();

// dp[i][j] = 子串 s[i..j) 能得到的字典序最小字符串
let mut dp: Vec<Vec<String>> = vec![vec![String::new(); n + 1]; n + 1];

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

// 选项1:保留 s[i]
let mut best = String::new();
best.push(s_bytes[i] as char);
best.push_str(&dp[i + 1][j]);

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

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

dp[0][n].clone()
}

// 判断两个字符在循环字母表中是否相邻
// 'a'-'b', 'b'-'a', 'a'-'z', 'z'-'a' 均视为相邻
fn is_consecutive(a: u8, b: u8) -> bool {
let diff = if a > b { a - b } else { b - a };
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/1190704/

相关文章:

  • 探究-Java字符串比较:从==与equals的误区到字符串常量池的深度解析
  • Rust 为 Python 补位:CPU密集、高并发、内存敏感与系统级扩展四大场景
  • 大学物理C:从真题拆解到核心概念贯通【个人学习笔记】【欢迎探讨指正】
  • (2026最新)南充防水补漏本地人必选的正规靠谱公司推荐-房屋漏水检测维修师傅上门-卫生间/厨房/阳台/房顶/外墙漏水检测精准测漏 - 即刻修防水
  • 2026年金相仪器品牌推荐榜:金相切割机/镶嵌机/研磨抛光机/显微镜源头厂家实力解析与选购指南 - 甄选服务推荐
  • STM32F407驱动HC-SR04实现厘米级超声波测距的Keil工程源码
  • ggplot2条形图原理精讲:geom_bar与geom_col的本质区别
  • (2026最新)南昌防水补漏本地人必选的正规靠谱公司推荐-房屋漏水检测维修师傅上门-卫生间/厨房/阳台/房顶/外墙漏水检测精准测漏 - 即刻修防水
  • WPF应用启动性能优化与启动画面实践
  • Matplotlib安装全攻略:从新手到专家的环境搭建指南
  • 基于STM32F103和AD9851的可调波形信号发生器工程包(含LCD菜单、DAC输出与完整驱动)
  • (2026最新)南充漏水检测维修师傅上门-正规防水补漏公司本地居民实测推荐五家-卫生间/屋顶/厨房/阳台/外墙/地下室专业仪器精准检测漏水点 - 安佳防水
  • 黄金分割法:从数学之美到工程优化的实战解析
  • 终极指南:基于真实充电数据的电动汽车电池健康度预测
  • Rerank 为什么重要?RAG 不只是把 TopK 塞给模型
  • 2026 年现阶段四子王旗值得关注的中厚板切割厂家哪家强,千万别让这玩意儿毁了你的预算,内行人揭秘省钱门道。 - 行业甄选官
  • Matlab(R2014a版本)一阶、二阶系统响应:从极点分布到系统稳定性实战解析
  • 2026年衢州市防油汉堡盒源头厂家综合体验测评 - 热点品牌推荐
  • 亲身探访北京泰格豪雅官方售后服务中心|官方电话及详细网点地址(2026年7月最新) - 亨得利官方服务中心
  • 数据挖掘-实战解析(二)基于多算法对比的乳腺癌数据聚类评估与优化
  • AI研发中的优化陷阱:当目标函数掩盖了真实问题
  • 从零到一:基于T265与PX4的无人机室内VIO自主飞行系统搭建全攻略
  • Pandas性能优化七步实战:从卡顿到秒级响应
  • 合肥及安徽各地女士科技记忆假发实体门店选购实用指南 - 热点品牌推荐
  • 电子滤波器实战:从RC到晶体管,如何用‘小电流’实现‘大滤波’效果
  • Python桌面应用自动化:从入门到实战的完整指南
  • Kimi LeetCode 3563. 移除相邻字符后字典序最小的字符串 TypeScript实现
  • (2026最新)南昌漏水检测维修师傅上门-正规防水补漏公司本地居民实测推荐五家-卫生间/屋顶/厨房/阳台/外墙/地下室专业仪器精准检测漏水点 - 安佳防水
  • 终极指南:如何用Python工具3分钟批量下载微博高清图片
  • 帝舵中国官方售后服务中心|官方热线和维修地址权威信息通告(2026年7月更新) - 帝舵中国官方服务中心