Leetcode OJ 131 Palindrome Partitioning [Medium]
来源:互联网 发布:洗衣机 品牌 知乎 编辑:程序博客网 时间:2024/06/09 21:29
Leetcode OJ 131 Palindrome Partitioning [Medium]
题目描述:
Given a string s, partition s such thatevery 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"]
]
题目理解:
给定一个字符串s,划分s,使每一个子字符串都是回文的,返回所有可能的划分。
测试用例:
功能测试:“aab”、“abb”等;
特殊输入:输入s是null;s只有一个字符;
分析:
1. 递归(深度优先搜索)+循环
2. 处理“aab”:“a”是回文的,加入到List<String>subString中,再处理“ab”,移除subList中最近添加的元素再继续;接着“aa”是回文的,加入到subString中,再处理“b” 移除subList中最近添加的元素再继续;接着“aab”不是回文的,不加入subString中;循环结束;
3. 当字符串的最后一位都已处理,则将subString加入到result中;
4. 判断回文的方法,可用java提供的函数将字符串翻转再比较,也可用如下方法
public boolean isPalindrome(String s, int start, int end) { while(start < end) { if(s.charAt(start) != s.charAt(end)) { return false; } start++; end--; } return true;}
5. 在开始计算之前,设置一个二维数组存储每一个子字符串(start,end)是否是回文:
boolean[][] isPalindrome = new boolean[s.length()][s.length()]; for (int start = s.length() - 1; start >= 0; start--) { for (int end = start; end < s.length(); end++) { if (end - start > 1) { isPalindrome[start][end] = isPalindrome[start + 1][end - 1] && s.charAt(start) == s.charAt(end); } else { isPalindrome[start][end] = s.charAt(start) == s.charAt(end); } } }
解答:
class Solution { public List<List<String>> partition(String s) { char[] c = s.toCharArray(); List<List<String>> result = new ArrayList<List<String>>(); List<String> subString = new ArrayList<String>(); recursion(s,result,subString,0); return result; } public void recursion(String s,List<List<String>> result, List<String> subString, int start){ if(start == s.length()){ result.add(new ArrayList(subString)); } for(int end = start+1; end <= s.length(); end ++){ String firstSubString = s.substring(start,end); if(isPalindrome(firstSubString)){ subString.add(firstSubString); recursion(s,result,subString,end); subString.remove(subString.size() - 1); } } } public static boolean isPalindrome(String s){ String rs = new StringBuilder(s).reverse().toString(); return s.equals(rs); }}
阅读全文
0 0
- Leetcode OJ 131 Palindrome Partitioning [Medium]
- [Leetcode 131, Medium] Palindrome Partitioning
- LeetCode OJ:Palindrome Partitioning
- LeetCode OJ Palindrome Partitioning
- LeetCode OJ:Palindrome Partitioning II
- LeetCode OJ - Palindrome Partitioning II
- LeetCode OJ Palindrome Partitioning II
- Leetcode 131. Palindrome Partitioning (Medium) (cpp)
- LeetCode: Palindrome Partitioning [131]
- LeetCode 131 Palindrome Partitioning
- LeetCode(131)Palindrome Partitioning
- [leetcode 131] Palindrome Partitioning
- [leetcode]131 Palindrome Partitioning
- LeetCode 131 Palindrome Partitioning
- leetcode ||131、Palindrome Partitioning
- LeetCode(131) Palindrome Partitioning
- leetcode 131: Palindrome Partitioning
- Leetcode #131 Palindrome Partitioning
- js 常用的全局函数 parseInt(),parseFloat()
- 函数(*foo[])()的使用
- 05.DQL(数据查询语言)基本操作下篇
- 从零开始的Android新项目11
- 项目组件化之遇到的坑
- Leetcode OJ 131 Palindrome Partitioning [Medium]
- Activity到底是什么时候显示到屏幕上的呢
- tp3.2中每笔订单商品详情分页
- 如何发表期刊论文
- Java->Android并发编程引气入门篇
- 从问题出发解析Activity、Window,View关系
- 【caffe-windows】全卷积网络特征图分析
- React Native 0.31 Bundle 预加载优化
- 判断java中两个对象是否相等