LeetCode Palindrome Partitioning
来源:互联网 发布:那家伙的声音知乎 编辑:程序博客网 时间:2024/06/17 19:02
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"]
]
http://oj.leetcode.com/problems/palindrome-partitioning/
题意分析: 对输入的字符串划分为一组回文字符串。
解题思路:首先用动态规划的方法生成标志回文字符串的数组,partitioning_map[i][j]=1的话,表明:string[i..j]是一个回文字符串。
其中一个知识点是:划分的时候判断a[i][j]是否是回文串,需要用到:a[i+1][j-1]的值,所以生成标志回文字符串的数组的时候外层循环要从 s.length()-1 开始逐次递减。
其次根据生成好的partitioning_map用dfs对数组进行划分。
Return all possible palindrome partitioning of s.
For example, given s = "aab",
Return
[
["aa","b"],
["a","a","b"]
]
http://oj.leetcode.com/problems/palindrome-partitioning/
题意分析: 对输入的字符串划分为一组回文字符串。
解题思路:首先用动态规划的方法生成标志回文字符串的数组,partitioning_map[i][j]=1的话,表明:string[i..j]是一个回文字符串。
其中一个知识点是:划分的时候判断a[i][j]是否是回文串,需要用到:a[i+1][j-1]的值,所以生成标志回文字符串的数组的时候外层循环要从 s.length()-1 开始逐次递减。
其次根据生成好的partitioning_map用dfs对数组进行划分。
//回文字符串划分//动态规划生成回文字符串数组//根据数组用深度搜索生成回文字符串的划分public class Solution { //生成标志回文字符串的数组,partitioning_map[i][j]=1的话,表明:string[i..j]是一个回文字符串 void dp(String s, char [][] palindrome_map) { for(int i=s.length()-1;i>=0;i--) { for(int j=i;j<s.length();j++) { if(i==j) { palindrome_map[i][j] = 1; } else { if(s.charAt(i)==s.charAt(j)) { if(j==i+1||palindrome_map[i+1][j-1]==1) { palindrome_map[i][j] = 1; } } } } } } //根据生成好的回文标记数组对字符串进行划分 void dfs(String s, int begin, char [][] palindrome_map, ArrayList<String> array, ArrayList<ArrayList<String>> result) { if(begin==s.length()) { result.add(array); return; } for(int i=begin;i<s.length();i++) { if(palindrome_map[begin][i]==1) { ArrayList<String> tmp = new ArrayList<String>(array); tmp.add(s.substring(begin,i+1)); dfs(s,i+1,palindrome_map,tmp, result); } } } public ArrayList<ArrayList<String>> partition(String s) { ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>(); ArrayList<String> array = new ArrayList<String>(); if(s==null||s.length()==0) { result.add(array); return result; } char [][] palindrome_map = new char[s.length()][s.length()]; dp(s, palindrome_map); dfs(s,0,palindrome_map,array,result); return result; }}
2 0
- 【leetcode】Palindrome Partitioning && Palindrome Partitioning II
- [LeetCode] Palindrome Partitioning && Palindrome Partitioning II
- LeetCode Palindrome Partitioning I&&Palindrome Partitioning II
- LeetCode Palindrome Partitioning, Palindrome Partitioning II
- [Leetcode][python]Palindrome Partitioning/Palindrome Partitioning II
- Leetcode:Palindrome Partitioning & Palindrome Partitioning II
- LeetCode: Palindrome Partitioning
- LeetCode : Palindrome Partitioning II
- [leetcode] Palindrome Partitioning II
- leetcode 122: Palindrome Partitioning
- leetcode:Palindrome Partitioning II
- leetcode:Palindrome Partitioning
- 【leetcode】Palindrome Partitioning
- 【leetcode】Palindrome Partitioning II
- leetcode - Palindrome Partitioning II
- Leetcode - Palindrome Partitioning
- LeetCode之Palindrome Partitioning
- [LeetCode]Palindrome Partitioning
- NYOJ 44 子串和
- Python下中文预处理
- 姜源:新媒体时代下的全平台海外推广
- 唯知己者,如自己也
- PHP超级全局变量总结
- LeetCode Palindrome Partitioning
- 判断手机号码格式的正则表达式
- java 通过System.getProperties()获取系统参数
- SSD和HDD的区别
- 第四周作业-键盘输入数据 和 数据类型
- 第四周作业-键盘输入数据 和 数据类型第二题
- ios动画模拟旋转加载
- The system does not support local kernel debugging. WIN7开启本地调试
- Using a Link State Advertisement (LSA) Options Bit to Prevent Looping in BGP/MPLS