LeetCode Palindrome Partitioning
2015-09-13 02:22
344 查看
原题链接在这里:https://leetcode.com/problems/palindrome-partitioning/
本题与Word Break II相似。
用递归解决子问题,如果是Palindrome就加进item,然后递归调用helper, 递归终止条件是能正好走到s.length().
Note:1. 用的item是一个list, 实际上是一个指针, 所以递归调用完需要回朔,也就是减掉最后一个点。
2. 当正好走到s.length()时加item需要加item的copy, 否则后面更改item, 已经加到res里的item也会改变。
Time Complexity: exponential.
AC Java:
本题与Word Break II相似。
用递归解决子问题,如果是Palindrome就加进item,然后递归调用helper, 递归终止条件是能正好走到s.length().
Note:1. 用的item是一个list, 实际上是一个指针, 所以递归调用完需要回朔,也就是减掉最后一个点。
2. 当正好走到s.length()时加item需要加item的copy, 否则后面更改item, 已经加到res里的item也会改变。
Time Complexity: exponential.
AC Java:
public class Solution { public List<List<String>> partition(String s) { List<List<String>> res = new ArrayList<List<String>>(); if(s == null || s.length() == 0){ return res; } helper(s,0, new ArrayList<String>(),res); return res; } private void helper(String s, int start,List<String> item, List<List<String>> res){ if(start == s.length()){ res.add(new ArrayList(item)); return; } StringBuilder sb = new StringBuilder(); for(int i = start; i <s.length(); i++){ sb.append(s.charAt(i)); if(isPalindrome(sb.toString())){ item.add(sb.toString()); helper(s,i+1,item,res); item.remove(item.size()-1); } } } private boolean isPalindrome(String s){ if(s == null || s.length() == 0){ return true; } int i = 0; int j = s.length()-1; while(i<j){ if(s.charAt(i) != s.charAt(j)){ return false; } i++; j--; } return true; } }
相关文章推荐
- nginx+memcache+tomcat配置(新手笔记)
- ThreadLocal
- 【九度OJ】题目1001:A+B for Matrices
- Metasploit CVE-2015-5122 Flash漏洞利用检测试验
- mybatis 错误解决Could not find parameter map
- Effective C++ 条款52 写了placement new也要写placment delete
- C 循环链表
- Ural 1519. Formula 1 ------ 插头dp
- 微信公众平台开发
- 容器处理请求
- ios 检测应用程序升级问题
- [Shell]Bash变量:环境变量的配置文件和登录信息
- linux磁盘及文件管理
- php的public、protected、private三种访问控制模式的区别
- [原]Mysql日志分析
- Android 关于inflate
- 2015百度校招之动态规划(兼职问题)
- POJ - 1962 Corporative Network(带权并查集)
- 基于 Android蓝牙4.0开发详细讲解,与硬件通信 史上最牛逼,最详细
- 活体检测