zoukankan      html  css  js  c++  java
  • 【leetcode刷题笔记】Palindrome Partitioning

    Given a string s, partition s such that every substring of the partition is a palindrome.

    Return all possible palindrome partitioning of s.

    For example, given s = "aab",
    Return

      [
        ["aa","b"],
        ["a","a","b"]
      ]

    题解:以aab来说明算法:

    1. 看第一个字符a,判断是否为回文,发现是回文,那么递归的判断剩下的ab是否回文;
    2. 看前两个字符aa,判断是否回文,发现是回文,那么递归的判断剩下的b是否回文;
    3. 看前3个字符aab,判断是否是回文,发现不是回文。
    4. 循环结束。

    所以这一个典型的递归算法:首先判断s(0,i)是否是回文,如果是,将s(0,i)暂存到result列表中,再递归的判断s(i+1,s.length)是否是回文,递归返回时,将s(0,i)从result中拿出来,继续循环判断s(0,i+1)是否回文......在递归的过程中,如果传递给递归函数的s是空串,说明找到了一中分割方法,并且存放在result列表中,那么此时就把result放到最终的答案列表answer中。

    代码如下:

     1 public class Solution {
     2     private boolean isPar(String s){
     3         int begin = 0;
     4         int end = s.length() - 1;
     5         
     6         while(begin < end){
     7             if(s.charAt(begin) != s.charAt(end))
     8                 return false;
     9             
    10             begin++;
    11             end--;
    12         }
    13         
    14         return true;
    15     }
    16     public void partitionDfs(String s,List<String> result,List<List<String>> answer){
    17         if(s.length() == 0){
    18             List<String> temp = new ArrayList<String>(result);
    19             answer.add(temp);
    20             return;
    21         }
    22         
    23         int length = s.length();
    24         for(int i = 1;i <= length;i++){
    25             String sub = s.substring(0,i);
    26             if(isPar(sub)){
    27                 result.add(sub);
    28                 partitionDfs(s.substring(i), result, answer);
    29                 result.remove(result.size()-1);
    30             }
    31         }
    32         
    33     }
    34     public List<List<String>> partition(String s) {
    35         List<List<String>> answer = new ArrayList<List<String>>();
    36         List<String> result = new ArrayList<String>();
    37         partitionDfs(s, result, answer);
    38         
    39         return answer;
    40     }
    41 }
  • 相关阅读:
    一个很好的菜单源码
    在盗版xp下安装ie7正式版 
    [导入]买新手机了
    [导入]手机解锁全集
    12种找工作方式的成功率
    Kerberos的原理 3
    Kerberos的原理 4
    Kerberos的原理 1
    jQuery 原理的模拟代码 6 代码下载
    Hashtable 中的键值修改问题
  • 原文地址:https://www.cnblogs.com/sunshineatnoon/p/3854751.html
Copyright © 2011-2022 走看看