剑指 Offer II 086. 分割回文子字符串
Posted 易小顺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer II 086. 分割回文子字符串相关的知识,希望对你有一定的参考价值。
算法记录
LeetCode 题目:
给定一个字符串 s ,请将 s 分割成一些子串,使每个子串都是 回文串 ,返回 s 所有可能的分割方案。
思路
说明
一、题目
回文串 是正着读和反着读都一样的字符串。
二、分析
- 需要在当前已经成立的情况下去继续的寻找字串的结果,也就是递归回溯问题。
- 在遇到字符串的结尾位置时进行一次遍历保存即可。
- 题目中出现的字符全是小写字母也就是简化了回文串的判断。
class Solution
private List<List<String>> ans = new ArrayList();
public String[][] partition(String s)
LinkedList<String> tem = new LinkedList();
dfs(tem, s, 0, s.length());
String[][] res = new String[ans.size()][];
for(int i = 0; i < ans.size(); i++)
res[i] = ans.get(i).toArray(new String[0]);
return res;
private void dfs(LinkedList<String> tem, String s, int start, int end)
if(start == end)
ans.add(new ArrayList(tem));
return;
for(int i = start; i < end; i++)
if (isPalindrome(s.substring(start, i + 1)))
tem.add(s.substring(start, i + 1));
dfs(tem, s, i + 1, end);
tem.remove(tem.size() - 1);
private boolean isPalindrome(String s)
if(s.length() == 1) return true;
for(int i = 0, j = s.length() - 1; i < j; i++, j--)
if(s.charAt(i) != s.charAt(j)) return false;
return true;
总结
熟悉深度优先搜索的方程定义。
以上是关于剑指 Offer II 086. 分割回文子字符串的主要内容,如果未能解决你的问题,请参考以下文章
Java每日一题——>剑指 Offer II 027. 回文链表