LeetcodePalindrome Partitioning
Posted wuezs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetcodePalindrome Partitioning相关的知识,希望对你有一定的参考价值。
题目链接:https://leetcode.com/problems/palindrome-partitioning/
题目:
Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
For example, given s = "aab"
,
Return
[ ["aa","b"], ["a","a","b"] ]
思路:
回溯,判断对每一种切分是否是回文串,剪枝函数是当第一个子串不是回文串时 不往下递归了。
ps:去年做过这题,当时脑子还停留在其他题上,居然想出个用回溯法计算出所有切分的可能,然后对这些切分后的字符串进行判断,= =ORZ
算法:
List<List<String>> results = new ArrayList<List<String>>(); public List<List<String>> partition(String s) { if (s.length() == 0) { return results; } dfs(s, 0, new ArrayList<String>()); return results; } public void dfs(String s, int start, List<String> res) { if (start == s.length()) { results.add(new ArrayList<String>(res)); return; } for (int i = start + 1; i <= s.length(); i++) { String left = s.substring(start, i); if (isPalindrome(left)) { res.add(left); dfs(s, i, res); res.remove(res.size()-1); } } } boolean isPalindrome(String s) { boolean flag = true; int i = 0, j = s.length() - 1; char c[] = s.toCharArray(); while (i < j) { if (c[i] != c[j]) { flag = false; break; } else { i++; j--; } } return flag; }
以上是关于LeetcodePalindrome Partitioning的主要内容,如果未能解决你的问题,请参考以下文章
LeetcodePalindrome Partitioning
LeetcodePalindrome Partitioning II