目录
- 1- 思路
- 回溯
- 2- 实现
- ⭐131. 分割回文串——题解思路
- 3- ACM 实现
- 原题链接:131. 分割回文串
1- 思路
回溯
思路:需要一个判断回文的函数
回溯思路:
-
- 回溯过程遍历的是 字符串
s
- 回溯过程遍历的是 字符串
-
- 参数为
startIndex
,主要用来处理到 起始点
- 参数为
- 通过
startIndex
和i
对字符串s
进行substring
,之后通过isPlainDrome
函数判断是否回文,若回文则添加到path
中
2- 实现
⭐131. 分割回文串——题解思路
class Solution {
List<List<String>> res = new ArrayList<>();
List<String> path = new ArrayList<>();
public List<List<String>> partition(String s) {
backTracing(s,0);
return res;
}
public void backTracing(String s,int startIndex){
// 终止条件
if(startIndex == s.length()){
res.add(new ArrayList<>(path));
return ;
}
// 回溯
for(int i = startIndex;i<s.length();i++){
if(isPlaindrome(s,startIndex,i)){
path.add(s.substring(startIndex,i+1));
backTracing(s,i+1);
path.remove(path.size()-1);
}
}
}
public boolean isPlaindrome(String s,int i,int j){
while(i<j){
if(s.charAt(i)!=s.charAt(j)){
return false;
}
i++;
j--;
}
return true;
}
}
3- ACM 实现
package Daily_LC.Month8_Week5;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* partition
*
* @author alcohol
* @Description
* @since 2024-08-28 13:40
*/
public class partition {
public static List<List<String>> partition(String s){
// 回溯
backTracing(s,0);
return res;
}
static List<List<String>> res = new ArrayList<>();
static List<String> path = new ArrayList<>();
public static void backTracing(String s,int startIndex){
// 终止条件
if(startIndex == s.length()){
res.add(new ArrayList<>(path));
return;
}
// 回溯
for(int i = startIndex ; i < s.length();i++){
if(isPlainDrome(s,startIndex,i)){
path.add(s.substring(startIndex,i+1));
backTracing(s,i+1);
path.remove(path.size()-1);
}
}
}
public static boolean isPlainDrome(String s,int i,int j){
while(i<j){
if(s.charAt(i)!=s.charAt(j)){
return false;
}
i++;
j--;
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
System.out.println("结果是"+partition(input).toString());
}
}