leetcode131. 分割回文串

举报
兔老大 发表于 2021/04/28 02:01:49 2021/04/28
【摘要】 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 返回 s 所有可能的分割方案。 示例: 输入: "aab" 输出: [   ["aa","b"],   ["a","a","b"] ] 思路:搜索回溯,搜索过程中检查是否是回文。 public class Solution { List<List<Strin...

给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。

返回 s 所有可能的分割方案。

示例:

输入: "aab"
输出:
[
  ["aa","b"],
  ["a","a","b"]
]

思路:搜索回溯,搜索过程中检查是否是回文。


  
  1. public class Solution {
  2. List<List<String>> res = new ArrayList<>();
  3. // Stack 这个类 Java 的文档里推荐写成 Deque<Integer> stack = new ArrayDeque<Integer>();
  4. // 注意:只使用 stack 相关的接口
  5. Deque<String> stack = new ArrayDeque<>();
  6. int len;
  7. public List<List<String>> partition(String s) {
  8. len = s.length();
  9. if (len == 0) return res;
  10. backtracking(s, 0);
  11. return res;
  12. }
  13. private void backtracking(String s, int start) {
  14. if (start == len) {
  15. res.add(new ArrayList<>(stack));
  16. return;
  17. }
  18. for (int i = start; i < len; i++) {
  19. if (checkPalindrome(s, start, i)) {
  20. stack.addLast(s.substring(start, i + 1));
  21. backtracking(s, i + 1);
  22. stack.removeLast();
  23. }
  24. }
  25. }
  26. private boolean checkPalindrome(String str, int left, int right) {
  27. while (left < right) {
  28. if (str.charAt(left) != str.charAt(right)) return false;
  29. left++;right--;
  30. }
  31. return true;
  32. }
  33. }

 

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/104410030

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。