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

分割回文串例题-区分组合回溯与最优动态规划

131.分割回文串

class Solution {List<List<String>> result=new ArrayList<>();int n;public List<List<String>> partition(String s) {n=s.length();dfs(0,new ArrayList<>(),"",s);return result;}public void dfs(int i,List<String> l,String prefix,String s){if (i==n){//判断list里面每个元素是否是回文串for (String item:l){String newStr = new StringBuilder(item).reverse().toString();if (!newStr.equals(item)){return;}}//注意 这里要拷贝一份新的result.add(new ArrayList<>(l));return;}//当前元素后不分割if (i<n-1){dfs(i+1,l,prefix+s.substring(i,i+1),s);}System.out.println(i);//当前元素后分割l.add(prefix+s.substring(i,i+1));dfs(i+1,l,"",s);l.remove(l.size()-1);}
}

132.分割回文串2

class Solution {public int minCut(String S) {char[] s = S.toCharArray();int n = s.length;int[][] palMemo = new int[n][n];for (int[] row : palMemo) {Arrays.fill(row, -1); // -1 表示没有计算过}int[] dfsMemo = new int[n];Arrays.fill(dfsMemo, -1); // -1 表示没有计算过return dfs(n - 1, s, palMemo, dfsMemo);}private int dfs(int r, char[] s, int[][] palMemo, int[] dfsMemo) {if (isPalindrome(0, r, s, palMemo)) { // 已是回文串,无需分割return 0;}if (dfsMemo[r] != -1) { // 之前计算过return dfsMemo[r];}int res = Integer.MAX_VALUE;for (int l = 1; l <= r; l++) { // 枚举分割位置if (isPalindrome(l, r, s, palMemo)) {res = Math.min(res, dfs(l - 1, s, palMemo, dfsMemo) + 1); // 在 l-1 和 l 之间切一刀}}return dfsMemo[r] = res; // 记忆化}private boolean isPalindrome(int l, int r, char[] s, int[][] palMemo) {if (l >= r) {return true;}if (palMemo[l][r] != -1) { // 之前计算过return palMemo[l][r] == 1;}boolean res = s[l] == s[r] && isPalindrome(l + 1, r - 1, s, palMemo);palMemo[l][r] = res ? 1 : 0; // 记忆化return res;}
}
http://www.xdnf.cn/news/4223.html

相关文章:

  • 主数据 × 知识图谱:打造企业认知智能的核心基础设施
  • C++GO语言微服务项目之 go语言基础语法
  • pcl平面投影
  • 解锁科研文献检索密码:多工具协同攻略
  • 代码规范总结
  • 推导部分和-图论+dfs+连通块
  • 【MongoDB篇】MongoDB的聚合框架!
  • 【区块链】Uniswap详细介绍
  • HTML07:表格标签
  • 多线程2-多线程编程
  • 【网络原理】IP协议
  • Git 使用的全流程以及SourceTree工具的使用操作和忽略文件的配置
  • BERT预训练
  • ArrayList 和 LinkedList 的区别
  • 「Mac畅玩AIGC与多模态21」开发篇17 - 多字段判断与多路径分支工作流示例
  • 《Python星球日记》 第36天:线性代数基础
  • 静态库和动态库的区别
  • 【强化学习】什么是强化学习?2025
  • tp8+swoole搭建
  • 5.2创新架构
  • Linux/AndroidOS中进程间的通信线程间的同步 - 虚拟内存操作
  • 20250506让NanoPi NEO core开发板使用Ubuntu core16.04系统的TF卡启动
  • 德尔菲法和层次分析法是什么
  • 基于STM32、HAL库的W25Q32JVSSIQ NOR FLASH存储器驱动应用程序设计
  • 【日撸 Java 三百行】Day 3(注释,基本if语句,函数调用)
  • Vue 2.0 详解全教程(含 Axios 封装 + 路由守卫 + 实战进阶)
  • OpenCV 图形API(78)图像与通道拼接函数-----调整图像大小的函数resize()
  • C# 方法(值参数和引用参数)
  • mysql 如何查询数据库链接日志
  • Spring 中四种常见初始化方法,对比 static {} 和 @PostConstruct 在并发,Spring 加载顺序大致为: JVM 加载类