题目描述:
难度:中等 相关标签:字符串、动态规划、回溯 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1: 输入:s = "aab" 输出:[["a","a","b"],["aa","b"]] 示例 2: 输入:s = "a" 输出:[["a"]] 提示: 1 <= s.length <= 16 s 仅由小写英文字母组成
思路图:
代码:
class Solution {
public List<List<String>> partition(String s) {
List<List<String>> list = new ArrayList<>();
getResult ( list, new ArrayList<>(), s, "", 0 );
return list;
}
public void getResult(List<List<String>> result, List<String> list, String s, String s1, int i ) {
if ( s1.length() != 0 && is( s1 ) ) {
list.add( s1 );
}
if( i == s.length() ) {
if( list.size() != 0 ) {
String str = "";
for ( String a : list )
str += a;
if ( str.equals( s ) ) //验证 字串集合 是否符合结果要求
result.add(list);
}
return;
}
//从起始下标开始的不同长度切割 递归
for ( int j = i; j < s.length(); j ++ ) {
s1 = s.substring( i, j + 1 );
getResult(result, new ArrayList<>(list), s, s1, j + 1 );
}
}
//判断是否回文
public boolean is(String s) {
for ( int i = 0; i < s.length()/2; i++ ){
if ( s.charAt( i ) != s.charAt( s.length() - 1 - i ) ) {
return false;
}
}
return true;
}
}
本文含有隐藏内容,请 开通VIP 后查看