20200416
題目 :分割回文串
給定一個字符串 s,將 s 分割成一些子串,使每個子串都是迴文串。
返回 s 所有可能的分割方案。
示例:
輸入: "aab"
輸出:
[
["aa","b"],
["a","a","b"]
]
思路 :回溯
code
package palindromePartitioning;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String S = input.nextLine().toString();
List<List<String>> res1 = partition(S);
System.out.println(res1);
}
public static List<List<String>> partition(String s){
int len = s.length();
List<List<String>> res = new ArrayList<>();
if(len == 0){
return res;
}
Deque<String> stack = new ArrayDeque<>();
backtracking(s,0,len,stack,res);
return res;
}
private static void backtracking(String s, int start, int len, Deque<String> path, List<List<String>> res){
if(start == len){
res.add(new ArrayList<>(path));
return;
}
for(int i = start;i<len;i++){
if(!isPalindrome(s,start,i)){
continue;
}
path.addLast(s.substring(start,i+1));
backtracking(s,i+1,len,path,res);
path.removeLast();
}
}
public static boolean isPalindrome(String str, int left, int right){
while (left < right){
if(str.charAt(left) != str.charAt(right) ){
return false;
}
left++;
right--;
}
return true;
}
}
輸入:aab
輸出:
參考