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