SplitPalindrome题目描述:给定一个字符串s,请将s拆分成一些子串,使得每个子串都是回文。返回s所有可能的分裂方案。回文是向前和向后读取相同的字符串。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。解决方案1:递归方法首先处理两种特殊情况。如果字符串为null,则直接返回空结果集;如果字符串长度为1,则只有一个splitcase,直接返回这个case。当字符串的长度大于1时,采用递归的方式进行处理,即使用一个方法isHuiwen来判断该字符串是否为回文。递归过程如下:从字符串的第一个字符开始判断,参数有上一个Partitioned回文列表,当前位置,当前待判断子串;首先判断字符串的最后一个字符是否已经处理,如果当前分区字符串是回文串,则将当前分区字符串添加到partitions中,再添加到结果集中,否则直接返回;否则,先判断当前分区串是否为回文,有两种可能:如果是,则将当前分区串加入partitions,将下一个字符作为新的分区串开始递归判断;如果不是,则将下一个字符添加到当前分区字符串中,递归判断。最后返回结果集。importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Collections;importjava.util.List;publicclassLeetCode_131{//结果集privatestaticList>result=newArrayList<>();publicstaticList>partition(Strings){//如果字符串为null,直接返回空结果集if(s==null){returnnewArrayList<>();}//如果字符串只有一个字符,可能只有一个结果,直接返回if(s.length()==1){Listpartition=newArrayList<>();partition.add(s);结果。添加(分区);返回结果;}partition(s,0,newArrayList<>(),s.substring(0,1));返回结果;}/***递归方法**@params原始字符串*@parampos当前位置*@param对当前位置之前已经拆分的回文进行分区*@paramcurPartition当前分区字符串*/privatestaticvoidpartition(Strings,intpos,列表<字符串g>partitions,StringcurPartition){//字符串的最后一个字符已经被处理if(pos==s.length()-1){if(isHuiwen(curPartition)){//如果当前分区字符串是灰文textstring,将当前分区字符串添加到partitions,然后添加到结果集中ListnewPartitions=newArrayList<>(Arrays.asList(newString[partitions.size()]));Collections.copy(newPartitions,分区);newPartitions.add(curPartition);结果.添加(新分区);}返回;}//如果当前分区串是回文,将当前分区串加入partitions,然后递归判断A字符if(isHuiwen(curPartition)){ListnewPartitions=newArrayList<>(Arrays.asList(new字符串[分区.size()]));Collections.copy(newPartitions,partitions);newPartitions.add(curPartition);分区(s,pos+1,newPartitions,s.substring(pos+1,pos+2));}//递归处理下一个字符串分区(s,pos+1,分区,curPartition+s.substring(pos+1,pos+2));}/***判断字符串是否为回文**@paramstrstring*@return*/privatestaticbooleanisHuiwen(Stringstr){if(str==null||str.length()<2){return真的;}for(inti=0;istring:partition("aab")){System.out.println(string);}}}【每日留言】