小言_互联网的博客

leetcode131. 分割回文串

318人阅读  评论(0)

给定一个字符串 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. }

 


转载:https://blog.csdn.net/hebtu666/article/details/104410030
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场