回文字符串
题目描述
给定一个字符串s,分割s使得s的每一个子串都是回文串
返回所有的回文分割结果。(注意:返回结果的顺序需要和输入字符串中的字母顺序一致。)
例如:给定字符串s=“aab”,
返回
[↵ [“aa”,“b”],↵ [“a”,“a”,“b”]↵ ]
题目解析
题目要的得到一个字符串所有的回文子字符串的列表,需要的到所有的解采用深度优先来查找
原题地址
代码
import java.util.*;
public class Solution {
public ArrayList<ArrayList<String>> partition(String s) {
ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>> ();
ArrayList<String> list = new ArrayList<String>();
if(s == null || s.length() == 0){
return null;
}
getRes(result,list,s);
return result;
}
//判断一个字符串是不是回文的
private boolean isPalindrome(String s){
int i = 0;
int j = s.length() -1;
while(i < j){
if( s.charAt(i) != s.charAt(j)){
return false;
}
i++;
j--;
}
return true;
}
//深度优先得到所有的解
private void getRes( ArrayList<ArrayList<String>> result,ArrayList<String> list, String s){
if(s.length() == 0){
result.add(new ArrayList<>(list));
}
int len = s.length();
for(int i = 1; i <= len; ++i){
String subStr = s.substring(0,i);
if(isPalindrome(subStr)){//这一段字符是回文的
list.add(subStr);
String lastStr = s.substring(i);//后面部分的
getRes(result,list,lastStr);
list.remove(list.size()-1);
}
}
}
}