Leetcode131:分割回文串
-
题目:
-
给你一个字符串
s
,请你将s
分割成一些子串,使每个子串都是 回文串 。返回s
所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。
-
-
思路:回溯算法
- 遍历字符串s,将符合要求的回文串进行分割,存放在一维数组deque
- 当一维数组遍历完,将符合要求的一维数组deque存放到二维数组res
-
代码如下:
class Solution {
//定义二维数组存放结果集
List<List<String>> res = new ArrayList<>();
//定义一维数组存放符合回文串的临时path
Deque<String> deque = new LinkedList<>();
public List<List<String>> partition(String s) {
//回溯算法
backtracking(s, 0);
return res;
}
void backtracking(String s,int startIndex){
//说明已经找到了一组分割方案,二维数组res增加一个一维结果集
if (startIndex >= s.length()){
res.add(new ArrayList(deque));
return;
}
for (int i = startIndex;i < s.length();i++) {
//符合回文串要求进行分割
if (isPalindrome(s, startIndex, i)) {
String str = s.substring(startIndex, i+1);
deque.addLast(str);
}else{
continue;
}
backtracking(s, i+1);
deque.removeLast();
}
}
//双指针判断是否为回文字符串
boolean isPalindrome(String s, int start, int end) {
for (int i = start, j = end; i < j; i++, j--) {
if (s.charAt(i) != s.charAt(j)) {
return false;
}
}
return true;
}
}