博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
267. Palindrome Permutation II --back tracking 以及palindrome 的优化方法ing
阅读量:5982 次
发布时间:2019-06-20

本文共 1786 字,大约阅读时间需要 5 分钟。

产生input中 所有permutation 中符合 palindrome 的。 Input: "aabb"Output: ["abba", "baab"] 分析: 和47. Permutations II 本质上一样的,首先字母有重复的,因此为了避免重复解,得先排序。 47题example
Input: [1,1,2]Output:[  [1,1,2],  [1,2,1],  [2,1,1]]

 然而写了一个类似47的解竟然TLE了,

优化策略1. 统计整个字符串中每个字母的个数,如果奇数个的个数>1 ,则所有的permutation 都不可能符合要求。 

做了这个优化后写了如下code, 但时间复杂度太高,排到了 0.0%了吧,算法复杂度为o(n!)

1 class Solution { 2     public List
generatePalindromes(String s) { 3 List
result = new ArrayList<>(); 4 int[] map = new int[128]; 5 if (!canPermutePalindrome(s, map)) 6 return new ArrayList < > (); 7 char[] ch = s.toCharArray(); 8 Arrays.sort(ch); 9 dfs(new StringBuilder(), result, ch,new boolean[s.length()]);10 return result;11 }12 13 private void dfs(StringBuilder curResult, List
result, char[] ch, boolean[] used){14 if(curResult.length() == ch.length){15 //System.out.println(curResult);16 String candid = curResult.toString();17 if(isPalindromes(candid)){18 result.add(candid);19 }20 return;21 }22 23 for(int i=0; i
0 && ch[i] == ch[i-1] && !used[i-1]) continue;25 26 curResult.append(ch[i]);27 used[i] = true;28 dfs(curResult,result,ch,used);29 curResult.setLength(curResult.length()-1);30 used[i] = false;31 32 }33 }34 35 private boolean isPalindromes(String s){36 int len = s.length();37 for(int i=0; i

看了 solution 里的优化方法, 可以优化到 o(n/2!) 而不是 o(n!) 每次只要build 一半的字符串就够了。

 

转载于:https://www.cnblogs.com/keepAC/p/9961393.html

你可能感兴趣的文章
Java小细节
查看>>
洛谷 P2486 BZOJ 2243 [SDOI2011]染色
查看>>
数值积分中的辛普森方法及其误差估计
查看>>
Web service (一) 原理和项目开发实战
查看>>
跑带宽度多少合适_跑步机选购跑带要多宽,你的身体早就告诉你了
查看>>
Javascript异步数据的同步处理方法
查看>>
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
通过jsp请求Servlet来操作HBASE
查看>>
Shell编程基础
查看>>
Shell之Sed常用用法
查看>>
Centos下基于Hadoop安装Spark(分布式)
查看>>
mysql开启binlog
查看>>
设置Eclipse编码方式
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
并查集hdu1232
查看>>
Mysql 监视工具
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>