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

DeepSeek LeetCode 3579. 字符串转换需要的最小操作数 Java实现

解题思路

采用区间DP + 贪心匹配:

· 核心操作:可以将 word1 分割成若干连续子串,对每个子串可执行替换、交换、反转三种操作。
· 贪心匹配:处理一个子串时,遇到不匹配的字符对 (a, b),优先寻找之前是否出现过相反的不匹配对 (b, a)。如果找到,说明这两个位置可以一次交换同时修复;否则记录当前不匹配对,等待后续配对。
· DP定义:dp[i] 表示将 word1[0..i-1] 转换为 word2[0..i-1] 的最小操作数。
· 状态转移:枚举最后一个子串的起点 j,取不反转和先反转两种情况的最小值:
· dp[i] = min(dp[i], dp[j] + cost(j, i, false))
· dp[i] = min(dp[i], dp[j] + 1 + cost(j, i, true))

---

Java 实现

```java
class Solution {
public int minOperations(String word1, String word2) {
int n = word1.length();
int[] dp = new int[n + 1];
for (int i = 1; i <= n; i++) {
dp[i] = Integer.MAX_VALUE;
}
dp[0] = 0;

for (int i = 1; i <= n; i++) {
for (int j = 0; j < i; j++) {
// 情况1:不反转子串 word1[j..i-1]
int cost1 = calcCost(word1, word2, j, i, false);
dp[i] = Math.min(dp[i], dp[j] + cost1);

// 情况2:先反转子串 word1[j..i-1],再处理(反转本身消耗1次操作)
int cost2 = calcCost(word1, word2, j, i, true);
dp[i] = Math.min(dp[i], dp[j] + 1 + cost2);
}
}
return dp[n];
}

/**
* 计算将 word1[l..r-1] 转换为 word2[l..r-1] 所需的最少操作数(只使用替换和交换)。
* @param reversed true 表示先将 word1 的这段子串反转,再与 word2 对应位置比较
*/
private int calcCost(String word1, String word2, int l, int r, boolean reversed) {
int[][] pending = new int[26][26]; // pending[a][b] 表示等待匹配的 (a, b) 数量
int swaps = 0; // 交换操作次数 = 不匹配对数量

for (int k = 0; k < r - l; k++) {
int idx1 = reversed ? r - 1 - k : l + k;
int idx2 = l + k;
int a = word1.charAt(idx1) - 'a';
int b = word2.charAt(idx2) - 'a';

if (a == b) continue;

// 检查是否有相反的 (b, a) 等待配对
if (pending[b][a] > 0) {
pending[b][a]--; // 配对成功,抵消一次交换
} else {
pending[a][b]++;
swaps++; // 新增一个待匹配的不匹配对
}
}
return swaps; // 每个不匹配对需要一次交换或替换操作
}
}
```

---

复杂度分析

· 时间复杂度:O(n³),其中 n ≤ 100。外层枚举 i 和 j 共 O(n²) 种子串,calcCost 遍历子串长度 O(n),总计 O(n³)。
· 空间复杂度:O(n + 26²),dp 数组 O(n),计数数组 O(26²) 为常数。

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

相关文章:

  • IntelliJ IDEA 2026中文配置全指南:JVM级语言注入与Skia字体适配
  • JetBrains学生认证、开源授权与AI本地推理实战指南
  • 2026混凝土挡土墙模板正规售卖渠道实用信息推荐 - 奔跑123
  • 生产级Agent技术栈:TypeScript+Next.js+PostgreSQL落地实践
  • Poissonsearch-oss开发者指南:Java API使用技巧与自定义插件开发
  • 2026江苏区域可提供谷歌推广降本方案的公司推荐 - 奔跑123
  • FastGPT | 18 - 知识库模块的领域模型
  • 上海优质GEO服务商精选推荐 - 浙江稻盛和夫
  • 缓存与数据库一致性实践:从Cache-Aside到最终一致性
  • BLDC电机正弦控制原理与实现详解
  • GPT-5.6 Sol登顶Design Arena:前端设计AI的量化评测与工程实践
  • 最强AI对话工具实战指南:从环境配置到生产部署
  • C++模板进阶:从类型参数到编译期计算的编程艺术
  • 格拉苏蒂中国官方售后服务中心|全新热线和详细维修地址权威信息声明(2026年7月最新) - 亨得利钟表维修中心
  • 构建智能地址解析服务:从混合字符串到结构化字段
  • 移动式拖车泵哪个牌子性能好?上海奥一泵业实力靠谱 - 品牌推荐大师
  • 梯度下降路径平滑算法:C++实现与工程调优指南
  • OpenCode本地部署指南:CLI嵌入式开发副驾配置全解析
  • 2026 郑州黄金变现怎么选?合扬连锁坚持对标大盘金价,杜绝隐形扣费 - 一站式奢品变现
  • SQLite 字符串含 NUL 字符问题多,教你判断和移除!
  • FastGPT | 19 - 文件导入与数据源接入
  • 大学生降 AI 用哪个软件最合适?知网送审这款最稳 - 我要发一区
  • C++实战:基于Native Wifi API构建Windows WiFi状态监控与智能重连工具
  • 浪琴中国官方售后服务中心|全新服务电话及详细地址权威信息通知(2026年7月最新) - 浪琴服务中心
  • 螺纹杯不靠花哨,一圈圈都是手感
  • Python Pillow(PIL)库实战:从基础操作到图像合成与特效
  • STM32 CAN双机通信实战:从硬件连接到HAL库代码解析
  • 【2027最新】基于SpringBoot+Vue的驾校预约学习系统管理系统源码+MyBatis+MySQL
  • 2026年可靠的箱体护坡模具选购参考指南 - 奔跑123
  • 闲置大牌包包别乱卖!长沙专业回收门店行情实测 - 奢侈品回收机构参考