zoukankan      html  css  js  c++  java
  • [LeetCode] Palindrome Partitioning

    (Version 0.0)

    这题的思路比较straightforward,可以看出会有overlapping的子问题,因此可以先按DP做法用一个二维数组存储对于某一substring是不是palindrome的判断,然后做backtracking时可以利用这个DP二维数组的结果来跳过重复的palindrome判断,不过如果不想使用DP做法其实每次都重复判断是否某一substring是palindrome也是可以过OJ的。用DP预处理的做法代码如下:

     1 public class Solution {
     2     public List<List<String>> partition(String s) {
     3         List<List<String>> result = new ArrayList<>();
     4         boolean[][] isPalindrome = new boolean[s.length()][s.length()];
     5         for (int i = 0; i < isPalindrome.length; i++) {
     6             isPalindrome[i][i] = true;
     7         }
     8         for (int l = 2; l <= s.length(); l++) {
     9             for (int i = 0; i + l <= s.length(); i++) {
    10                 int j = i + l - 1;
    11                 isPalindrome[i][j] = (isPalindrome[i + 1][j - 1] || l == 2) && s.charAt(i) == s.charAt(j);
    12             }
    13         }
    14         List<String> list = new ArrayList<>();
    15         helper(result, list, s, isPalindrome, 0);
    16         return result;
    17     }
    18     
    19     private void helper(List<List<String>> result, List<String> list, String s, boolean[][] isPalindrome, int start) {
    20         if (start == s.length()) {
    21             List<String> temp = new ArrayList<>(list);
    22             result.add(temp);
    23             return;
    24         }
    25         for (int end = start; end < s.length(); end++) {
    26             if (isPalindrome[start][end]) {
    27                 list.add(s.substring(start, end + 1));
    28                 helper(result, list, s, isPalindrome, end + 1);
    29                 list.remove(list.size() - 1);
    30             }
    31         }
    32     }
    33 }
  • 相关阅读:
    from import 的认识
    模块初识
    eq方法
    hash介绍
    item系列
    析构函数
    serializers进阶
    APIView源码解析
    RPC协议
    面试题补充
  • 原文地址:https://www.cnblogs.com/icecreamdeqinw/p/4331680.html
Copyright © 2011-2022 走看看