131. Palindrome Partitioning
Posted 我的名字叫周周
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了131. Palindrome Partitioning相关的知识,希望对你有一定的参考价值。
/* * 131. Palindrome Partitioning * 2015-12-17 by Mingyang * Return all possible palindrome partitioning of s. * 1.长度标准:无(固定) * 2.可选的范围:从start开始到最后一个 * 3.往前走一步:temp加入这个数,然后start加1表示从下一位加起 * 4.后退一步:temp减去这个数 * 5.特别的case:start到最后一位 * 6.关于重复:无 * 这个题目自己最开始做的时候没有加start这个参数,每次把没用完的string截取下来继续往前传 * 但是更好的是用一个start index(这样不会把string截取来截取去的) */ public List<List<String>> partition(String s) { List<String> item = new ArrayList<String>(); List<List<String>> res = new ArrayList<List<String>>(); if (s == null || s.length() == 0) return res; dfs(s, 0, item, res); return res; } public void dfs(String s, int start, List<String> item,List<List<String>> res) { if (start == s.length()) { res.add(new ArrayList<String>(item)); return; } for (int i = start; i < s.length(); i++) { String str = s.substring(start, i + 1);// 每一轮dfs进来都是先取第一个数,start index,可以不用stringbuffer来存 if (isPalindrome(str)) { item.add(str); dfs(s, i + 1, item, res);// 上面取到i,所以下一个start index就是i+1 item.remove(item.size() - 1); } } } public static boolean isPalindrome(String s) { int low = 0; int high = s.length() - 1; while (low < high) { if (s.charAt(low) != s.charAt(high)) return false; low++; high--; } return true; }
以上是关于131. Palindrome Partitioning的主要内容,如果未能解决你的问题,请参考以下文章