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"]
  ]
解题思路一:

将s分为左右两个部分,分别求出两边的partition,然后粘一块即可,JAVA实现如下:

	static public List<List<String>> partition(String s) {
Set<List<String>> set = new HashSet<List<String>>();
if (isPalindrome(s)) {
List<String> alist = new ArrayList<String>();
alist.add(s);
set.add(alist);
}
for (int i = 1; i < s.length(); i++) {
List<List<String>> left = partition(s.substring(0, i));
List<List<String>> right = partition(s.substring(i, s.length()));
for (List<String> aLeft : left)
for (List<String> aRight : right) {
List<String> alist = new ArrayList<String>(aLeft);
alist.addAll(aRight);
set.add(new ArrayList<String>(alist));
}
}
return new ArrayList<List<String>>(set);
} static boolean isPalindrome(String s) {
int left = 0;
int right = s.length() - 1;
while (left < right)
if (s.charAt(left++) != s.charAt(right--))
return false;
return true;
}

结果TLE

解题思路二:

修改下思路一,从左边入手,如果左边是Palindrome,对右边求一个partition,这样求得的结果也不会重复,这样就可以AC了,JAVA实现如下:

	static public List<List<String>> partition(String s) {
ArrayList<List<String>> list = new ArrayList<List<String>>();
if (isPalindrome(s)) {
List<String> alist = new ArrayList<String>();
alist.add(s);
list.add(alist);
}
for (int i = 1; i < s.length(); i++)
if (isPalindrome(s.substring(0, i))) {
List<String> aLeft = new ArrayList<String>();
aLeft.add(s.substring(0, i));
List<List<String>> right = partition(s.substring(i, s.length()));
for (List<String> aRight : right) {
List<String> alist = new ArrayList<String>(aLeft);
alist.addAll(aRight);
list.add(new ArrayList<String>(alist));
}
}
return list;
} static boolean isPalindrome(String s) {
int left = 0;
int right = s.length() - 1;
while (left < right)
if (s.charAt(left++) != s.charAt(right--))
return false;
return true;
}

最新文章

  1. SQL 基础语法(一)
  2. 【Network】TCPDUMP 详解
  3. html5吹牛扯淡篇,闲话内容。
  4. bzoj2330 糖果
  5. 理解ip和端口
  6. Unity自学路线整理(参看微信公众号Unity墙外的世界的文章 )
  7. CSS background 属性
  8. VC++ CButton::SetCheck 的使用方法
  9. 分享45个设计师应该见到的新鲜的Web移动设备用户界面PSD套件
  10. ActiveMQ学习(一)——MQ的基本概念
  11. muduo库安装
  12. 【原创】书本翻页效果booklet jquery插件系列之简介
  13. 关于 hashCode() 你需要了解的 3 件事
  14. Away3D 的实体收集器流程2
  15. Sql Server 2005 开发版亲測可用下载地址
  16. CMS垃圾回收机制
  17. Vijos: P1046观光旅游
  18. reference file contains errors
  19. WinXP系统下Opencms的安装与配置
  20. Unity项目导入的error

热门文章

  1. Mac OS X上使用Wireshark抓包
  2. Android跨进程訪问(AIDL服务)
  3. hibernate向mysql插入数据后,得到该条数据主键的方法
  4. java基础篇5之泛型
  5. Wireshark网络分析实战笔记(三)基本信息统计工具的使用方法
  6. eletron 播放rtmp flash 播放器问题
  7. Foreach嵌套Foreach速度慢优化方案
  8. Jconsole 工具介绍和使用方法
  9. 面向对象程序的设计原则--Head First 设计模式笔记
  10. slam cartographer 学习