1、分割回文串——回溯法
2015-10-29 19:55
330 查看
题目:
给定一个字符串s,将s分割成一些子串,使每个子串都是回文串。
返回s所有可能的回文串分割方案。
样例
给出 s =
标签 Expand
回溯法 深度优先搜索
给定一个字符串s,将s分割成一些子串,使每个子串都是回文串。
返回s所有可能的回文串分割方案。
样例
给出 s =
"aab",返回
[ ["aa", "b"], ["a", "a", "b"] ]
标签 Expand
回溯法 深度优先搜索
package unit1; import java.util.ArrayList; import java.util.List; public class Huiwen { /**检查是否为回文 * @param s * @return */ public static boolean check(String s){ String s1=""; char[] c=s.toCharArray(); /*Character[] ctr=new Character[s.length()]; byte[] b=s.getBytes();*/ for(int i=s.length()-1;i >=0;i--){ /*System.out.println(b[i]);*/ c[i]=s.charAt(i); // System.out.println(c[i]); s1=s1+c[i]; // System.out.println(s1); } if(s1.equals(s)){ return true; } else{ return false; } } /**获取所有不为空的回文子串 * @param str */ public static void partion(String str){ String substr=""; for(int i=0;i<str.length();i++){ for (int j=i;j<str.length()+1;j++){//注意这里j的取值范围,因为截取函数substring(i,j)包含i不包含j substr=str.substring(i, j); if(!("".equals(substr))&&check(substr)){//打印所有不为空的回文子串 System.out.println("i:"+i+"j:"+j+"substr:"+substr); } } } } /**获取字符串S的回文分割法集合 * @param s * @return */ public static ArrayList<ArrayList<String>> partition(String s) { // write your code here ArrayList<ArrayList<String>> pLists = new ArrayList<ArrayList<String>>(); int length = s.length(); ArrayList<String> array = new ArrayList<String>(); if (s.length() == 0 || s == null) { pLists.add(array); return pLists; } helper(s, pLists, array, 0); return pLists; } public static void helper(String s, ArrayList<ArrayList<String>> pLists, ArrayList<String> array, int start) { if (start == s.length()) { pLists.add(array); return; } for (int i = start; i < s.length(); i++) { if (check(s.substring(start, i + 1))) { ArrayList<String> tmp = new ArrayList<String>(array); tmp.add(s.substring(start, i + 1)); helper(s, pLists, tmp, i + 1); } } } public static void main(String[] args){ int flag=2; if (flag==1){//获取全部的不为空的回文子字符串 partion("aab"); } else if (flag==2){//获取S的回文分割方案 System.out.println(partition("aab")); } } }
相关文章推荐
- 小米开源文件管理器MiCodeFileExplorer-源码研究(7)-Favorite收藏管理和SQLite数据库CRUD
- 小米开源文件管理器MiCodeFileExplorer-源码研究(7)-Favorite收藏管理和SQLite数据库CRUD
- 小米开源文件管理器MiCodeFileExplorer-源码研究(7)-Favorite收藏管理和SQLite数据库CRUD
- 用栈实现括号匹配
- 1041. Be Unique
- Matlab 如何截取视频中的每一帧图像
- iOS开发 ----- 加载动画之牛顿摆的实现
- 移动端前端UI库—Frozen UI、WeUI、SUI Mobile
- KVC与KVO
- 解决JSON.stringify()在IE10下无法使用的问题
- Tar打包、压缩与解压缩到指定目录的方法
- hdu3374String Problem kmp+最大最小表示法
- CentOS6.7源码搭建LAMP平台
- Java NIO系列教程(六) Selector
- redis基本数据结构(2)
- win8下安装matlab7.0
- Altium designer的简单学习
- iOS 集成支付宝
- 南邮编程在线编程题九:删除所有相同值的元素
- 机器学习的5种“兵法"