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 }
  • 相关阅读:
    idea安装并使用maven依赖分析插件:Maven Helper
    idea导入maven项目结构不全
    java占位符%d,%s等的使用
    子类的父类和接口具有共同的方法
    Android Event log常用tag说明
    使用grep精确匹配一个单词
    知识管理系统 --- WCP
    运营工具大全
    这些超好用的神器APP,你手机里有吗?
    10个完全免费的神器工具,让你事半功倍
  • 原文地址:https://www.cnblogs.com/sunshineatnoon/p/3854751.html
Copyright © 2011-2022 走看看