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"]
      ]
    
    求解所有可能的回文划分。
    分析:p=pp(s[1...n])
    初始: if n==1, return <<s>>
    递归:p=s[1] || pp(s[2...n])
       [+s[1..2] || pp(s[3..n]), if s[1..2] is palindrome;
        +s[1..3] || pp(s[4..n]), if s[1..3] is palindrome;
        ...
        +s[1..n], if s[1..n] is palindrome;
       ]
    优化:pp(s[i..j])在递归过程中回重复调用,维护Look-up table.
    非优化的代码:
    View Code
     1 package Palindrome.Partitioning.I;
     2 
     3 import java.util.ArrayList;
     4 
     5 public class calc {
     6 
     7     
     8 
     9     public boolean palindrome(String c) {
    10         if(c.length() == 1){
    11             return true;
    12         }
    13         for (int i = 0; i < c.length() / 2; i++) {
    14             if (c.charAt(i) != c.charAt(c.length() - 1 - i)) {
    15                 return false;
    16             }
    17         }
    18         return true;
    19     }
    20 
    21     public ArrayList<ArrayList<String>> partition(String s) {
    22         // Start typing your Java solution below
    23         // DO NOT write main() function
    24         int sn = s.length();
    25         if (sn == 1) {
    26             ArrayList<ArrayList<String>> t = new ArrayList<ArrayList<String>>();
    27             ArrayList<String> ti = new ArrayList<String>();
    28             ti.add(s);
    29             t.add(ti);
    30             return t;
    31         }
    32         ArrayList<ArrayList<String>> ret = new ArrayList<ArrayList<String>>();
    33         for (int i = 1; i <= s.length(); i++) {
    34             String ss = s.substring(0, i);
    35 
    36             if (palindrome(ss)) {
    37                 if (i == s.length()) {
    38                     ArrayList<ArrayList<String>> t = new ArrayList<ArrayList<String>>();
    39                     ArrayList<String> ti = new ArrayList<String>();
    40                     ti.add(s);
    41                     t.add(ti);
    42                     ret.addAll(t);
    43                 }
    44                 ArrayList<ArrayList<String>> t = partition(s.substring(i));
    45                 // add ss to head of each array-list
    46                 for (ArrayList<String> ti : t) {
    47                     ti.add(0, ss);
    48                 }
    49                 ret.addAll(t);
    50 
    51             }
    52         }
    53         return ret;
    54     }
    55 
    56     public static void main(String args[]) {
    57         calc c = new calc();
    58         ArrayList<ArrayList<String>> t = c.partition("aab");
    59         for(ArrayList<String> ti : t){
    60             for(String tii : ti){
    61                 System.out.print(tii + ", ");
    62             }
    63             System.out.println();
    64         }
    65     }
    66 
    67 }
  • 相关阅读:
    Docker配置samba共享
    阿里云SSL 免费证书申请方法
    linux centos7 关闭防火墙的方法
    PHP 面向对象的特性 抽象类和接口
    详解mixphp的依赖注入控制反转
    swoole mixphp swoolefor热更新使用方法
    nginx ab并发测试 apr_socket_recv: Connection refused (111
    PHP golang java 并发测试
    php.ini 添加的模块没更新的解决方法
    关于golang的未来的道路
  • 原文地址:https://www.cnblogs.com/luweiseu/p/3053357.html
Copyright © 2011-2022 走看看