LeetCode 131.分割回文串
分割回文串
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。
回文串 是正着读和反着读都一样的字符串。
输入:s = "aab" |
方法:回溯
算法思路:
切割问题类似于组合问题,例如对于字符串abcdef:
- 组合问题:选取一个a之后,在bcdef中再去选取第二个,选取b之后在cdef中在选组第三个……。
- 切割问题:切割一个a之后,在bcdef中再去切割第二段,切割b之后在cdef中在切割第三段……。
-
确定递归函数参数
除了输入的字符串
s外,还需设置startIndex记录切割过的位置,不能重复切割。 -
确定终止条件
当切割线到字符串最后面,即
startIndex == s.size()时,终止递归。if(startIndex == s.length()){
result.add(new ArrayList<>(path));
return;
} -
编写判断是否为回文串的代码
public boolean isPalindrome(String s, int startIndex, int end){
while(startIndex < end){
if(s.charAt(startIndex++) != s.charAt(end--)){
return false;
}
}
return true;
} -
单层搜索的过程
判断
startIndex到i的子串是否为回文串,若是则加到path中,否则continue结束本次for循环。
代码实现:
class Solution { |
参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Abacteria的学习小站!
