博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】Palindrome Partitioning (Java)
阅读量:6487 次
发布时间:2019-06-23

本文共 2388 字,大约阅读时间需要 7 分钟。

hot3.png

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"]  ]

题意大致就是找出所有是回文的字符串分解方式。

解题思路:

我第一眼看过去,就只想到了可以用深度搜索的方式来解决,就是先从头分出一个字符情况时,剩下的可以怎么分;然后从头分出二个字符时,剩下的怎么分;依次类推…… 效率那是真的很低,但是估计是测试用例比较少,没有出现Time Limited的问题,只beats 1%。。。。

public class Solution {    public List
> partition(String s) { List
> result = new ArrayList
>(); List
 array = new ArrayList
(); StringBuilder rest = new StringBuilder(s); partitionSubstring(result, array, rest); return result;    }  public void partitionSubstring(List
> result, List
 array, StringBuilder rest){ if(rest.toString().length()==0){ List
 temp = new ArrayList
(array); result.add(temp); return; } for(int i = 1; i <= rest.toString().length(); i++){ String s = rest.substring(0, i); if(isPalindrome(s)){ array.add(s); rest.delete(0, i); partitionSubstring(result, array, rest); rest.insert(0, s); array.remove(array.size()-1); } } } public boolean isPalindrome(String s){        return s.equals(new StringBuffer(s).reverse().toString());    }}

这么低的效率我也不能忍了,就只好去找别人的思路了。。。

果然,我就猜到是DP(动态规划)这个东西。我看到的作者是将是否是回文记录在了一个二维数组中,然后就不用像我一样每次都要调用方法判断了,然后也是用了深度搜索的方法。

动态规划这个东西我的理解就是要找好一个最优子结构,然后要设计好用什么表示和存储他,然后就可以使用了。

下面是经我修改提交后的代码:

//回文字符串划分//动态规划生成回文字符串数组//根据数组用深度搜索生成回文字符串的划分public class Solution {    //生成标志回文字符串的数组,partitioning_map[i][j]=1的话,表明:string[i..j]是一个回文字符串    void dp(String s, char [][] palindrome_map) {        for(int i=s.length()-1;i>=0;i--) {            for(int j=i;j
 array, List
> result) {        if(begin==s.length()) {            result.add(array);            return;        }                for(int i=begin;i
 tmp = new ArrayList
(array);                tmp.add(s.substring(begin,i+1));                dfs(s,i+1,palindrome_map,tmp, result);            }        }    }    public List
> partition(String s) {        List
> result = new ArrayList
>();        List
 array = new ArrayList
();        if(s==null||s.length()==0) {            result.add(array);            return result;        }        char [][] palindrome_map = new char[s.length()][s.length()];                dp(s, palindrome_map);        dfs(s,0,palindrome_map,array,result);        return result;    }}

原文地址:

beats 67%, 写的比我好多了。。。

转载于:https://my.oschina.net/ruanhang1993/blog/537817

你可能感兴趣的文章
ORACLE 的游标
查看>>
虚拟机安装的UBUNTU全屏的方法:
查看>>
java虚拟机类加载器
查看>>
ASP.NET状态管理之八(会话Session)
查看>>
转载:大型网站架构演变和知识体系
查看>>
set集合
查看>>
SVN服务器的搭建和使用
查看>>
mvc中枚举的使用和绑定枚举值到DropDownListFor
查看>>
多目标跟踪的评价指标
查看>>
HTTPS(SSL)详解以及PHP调用方法
查看>>
突发小事件,USB接口问题
查看>>
Nginx负载均衡配置实例详解
查看>>
L1-009. N个数求和
查看>>
sqlserver 批量删除存储过程(转)
查看>>
自建型呼叫中心
查看>>
Inno setup中定制安装路径
查看>>
要懂得对你的老板好一点!
查看>>
visio如何让动态连接线的单箭头变成双箭头?
查看>>
poj 1273 Drainage Ditches 网络流最大流基础
查看>>
Bash: how to check if a process id (PID) exists
查看>>