news 2026/7/14 10:44:23

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kimi LeetCode 3563. 移除相邻字符后字典序最小的字符串 Java实现

根据搜索结果,以下是 LeetCode 3563. Lexicographically Smallest String After Adjacent Removals 的 Java 实现。

题目理解

- "连续" 定义:字母表中绝对差为 1 或 25 的两个字母(即 `a↔b`, `b↔c`, ..., `y↔z`, `z↔a`)
- 每次操作可删除任意一对相邻且连续的字母
- 删除后字符串会压缩,两边的字符会重新相邻
- 目标:经过任意次操作后,得到字典序最小的字符串

核心思路

使用 区间 DP:

1. `dp[i][j]` 表示子串 `s[i..j)` 经过若干次删除操作后能得到的最小字典序字符串
2. 初始化 `dp[i][i] = ""`(空串)
3. 对于每个区间 `s[i..j)`:
- 保留 `s[i]`:结果为 `s[i] + dp[i+1][j]`
- 删除 `s[i]`:需要找到 `s[k]`(`i < k < j`),使得 `s[i]` 和 `s[k]` 连续,且中间部分 `s[i+1..k)` 能被完全删空(即 `dp[i+1][k] == ""`),结果为 `dp[k+1][j]`
- 取两者中字典序更小的

时间复杂度:O(n³),空间复杂度:O(n²)

Java 实现

```java
class Solution {
public String lexicographicallySmallestString(String s) {
final int n = s.length();
// dp[i][j]: 子串 s[i..j) 经过若干次删除后能得到的最小字典序字符串
String[][] dp = new String[n + 1][n + 1];

// 初始化:空区间结果为 ""
for (int i = 0; i <= n; ++i) {
dp[i][i] = "";
}

// 按区间长度从小到大计算
for (int d = 1; d <= n; ++d) {
for (int i = 0; i + d <= n; ++i) {
final int j = i + d;

// 情况1:保留 s[i],结果为 s[i] + dp[i+1][j]
String minString = s.charAt(i) + dp[i + 1][j];

// 情况2:尝试删除 s[i]
// 需要找到 s[k] 与 s[i] 连续,且 s[i+1..k) 能被完全删空
for (int k = i + 1; k < j; ++k) {
if (isConsecutive(s.charAt(i), s.charAt(k)) && dp[i + 1][k].isEmpty()) {
String candidate = dp[k + 1][j];
if (candidate.compareTo(minString) < 0) {
minString = candidate;
}
}
}

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

return dp[0][n];
}

// 判断两个字母是否"连续"(在循环字母表中差1或25)
private boolean isConsecutive(char a, char b) {
int diff = Math.abs(a - b);
return diff == 1 || diff == 25;
}
}
```

代码说明

要点 说明
`dp[i][j]` 左闭右开区间 `s[i..j)` 的最小字典序结果
`dp[i][i] = ""` 空子串结果为空字符串
保留 `s[i]` `s.charAt(i) + dp[i+1][j]`
删除 `s[i]` 需找到 `s[k]` 与 `s[i]` 连续,且 `dp[i+1][k]` 为空(中间全删完),然后取 `dp[k+1][j]`
`isConsecutive` `diff == 1` 处理 `a-b`, `b-c` 等;`diff == 25` 处理 `z-a` 的循环情况

复杂度分析

- 时间复杂度:O(n³),外层两重循环遍历所有 O(n²) 个区间,内层循环最多 O(n) 次查找 `k`
- 空间复杂度:O(n²),存储 `dp` 数组

如需优化,可以考虑使用记忆化搜索 + 缓存的方式,或者进一步优化状态转移。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 10:44:06

高精度ADC系统设计:基于ADS131M02与PIC18F46K20的工业级数据采集方案

1. 项目背景与核心需求 在工业自动化、医疗设备和能源监测等高精度测量领域&#xff0c;标准ADC芯片往往难以满足特定场景下的严苛要求。我曾参与一个风力发电机振动监测项目&#xff0c;客户需要同时采集8路振动信号&#xff0c;要求24位分辨率、50kSPS采样率且通道间同步误差…

作者头像 李华
网站建设 2026/7/14 10:44:03

Python通达信数据获取完整指南:5个实战场景解析mootdx高效用法

Python通达信数据获取完整指南&#xff1a;5个实战场景解析mootdx高效用法 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在量化交易和金融数据分析领域&#xff0c;获取准确、稳定的A股市场数据…

作者头像 李华
网站建设 2026/7/14 10:43:39

ONNX模型库生产部署实战:跨框架AI模型集成与性能优化指南

ONNX模型库生产部署实战&#xff1a;跨框架AI模型集成与性能优化指南 【免费下载链接】models A collection of pre-trained, state-of-the-art models in the ONNX format 项目地址: https://gitcode.com/gh_mirrors/model/models 在当今AI生产环境中&#xff0c;模型…

作者头像 李华
网站建设 2026/7/14 10:43:23

抖音直播数据采集神器:3分钟破解实时弹幕抓取难题

抖音直播数据采集神器&#xff1a;3分钟破解实时弹幕抓取难题 【免费下载链接】DouyinLiveWebFetcher 抖音直播间网页版的弹幕数据抓取&#xff08;2025最新版本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher 还在为抖音直播数据抓取…

作者头像 李华
网站建设 2026/7/14 10:41:52

实践:使用prefetch高效下载与配置NCBI SRA数据

1. 初识NCBI SRA与prefetch工具如果你正在处理高通量测序数据&#xff0c;NCBI的SRA&#xff08;Sequence Read Archive&#xff09;数据库绝对是你绕不开的资源库。这里存储了海量的公开测序数据&#xff0c;从基因组测序到转录组分析&#xff0c;几乎涵盖了所有主流研究领域的…

作者头像 李华