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

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

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;}
}

相关文章:

  • Transformer中的三种注意力机制
  • react-14defaultValue(仅在首次渲染时生效)和value(受 React 状态控制)
  • 如何解决Kafka集群中Broker磁盘IO瓶颈?
  • 数智管理学(七)
  • 永磁同步电机控制算法-反馈线性化直接转矩控制
  • 华为策略路由
  • Facebook隐私保护措施的优缺点解析
  • 如何设计Kafka的高可用跨机房容灾方案?(需要实战,未实战,纯理论)
  • Kafka的Log Compaction原理是什么?
  • 2025.5.6总结
  • Leetcode Hot 100 三数之和
  • 01硬件原理图
  • API 开发实战:基于京东开放平台的实时商品数据采集接口实现
  • 【C/C++】new关键字解析
  • 探索开源大模型体系:当今AI的引领者
  • ActiveMQ 安全机制与企业级实践(二)
  • 计算广告-广告智能出价原理-出价的数学建模
  • 连锁企业筹建流程效能提升方案:日事清在标准化进度管控中的落地应用​
  • SSTI学习
  • 学习人工智能开发的详细指南
  • 巴基斯坦外交部:印度侵略行径侵犯巴主权
  • 起底新型保健品电话销售诈骗:从快递信息中筛选对象,忽悠其高价买药
  • 重温经典|中国首部剪纸动画片《猪八戒吃瓜》创作始末
  • 罗马尼亚总理乔拉库宣布辞职
  • 晒被子最大的好处,其实不是杀螨虫,而是……
  • 射箭世界杯赛上海站即将开幕,多方联动讲好上海故事