博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LC 267 Palindrome Permutation II
阅读量:6171 次
发布时间:2019-06-21

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

Given a string s, return all the palindromic permutations (without duplicates) of it. Return an empty list if no palindromic permutation could be form.For example:Given s = "aabb", return ["abba", "baab"].Given s = "abc", return [].
public class Solution {    private List
list = new ArrayList
(); public List
generatePalindromes(String s) { //判断一个string能否组成panlindrome, LC 266 int numOdds = 0; int[] map = new int[256]; for(char c : s.toCharArray()){ map[c]++; // 一个char第一次出现numOdds增加一,第二次出现numOdds减少一。 // 出现偶数次的char最终对numOdds被抵消。 // 出现基数词的char则会让numOdss加一。 numOdds = (map[c]&1) == 1 ? numOdds+1 : numOdds - 1; } if(numOdds > 1) return list; //类似于409 Longest Palindrome, 奇数个的那个char单独考虑,必须放中间。 //这里palindrome本身是对称的,所以只需要找到一半的全排列,利用对称就能得到完整的string. String mid = ""; int halfLen = 0; for(int i=0; i<256; i++){ if(map[i] == 0) continue; // 找到那个出现奇数次的字符。 if((map[i]&1) == 1){ mid = "" + (char)i; map[i]--; } // 得到各个字符一半数量的长度 map[i] = map[i]/2; halfLen += map[i]; } // 数字的permutation. generatePalindromes("", map, halfLen, mid); return list; } public void generatePalindromes(String half, int[] map, int halfLen, String mid){ // 终止条件,利用palindrome的对称性输出结果。 if(half.length() == halfLen){ StringBuilder reverse= new StringBuilder(half).reverse(); list.add(half + mid + reverse); return; } for(int i=0; i<256; i++){ if(map[i] > 0){ map[i]--; generatePalindromes(half+(char)i, map, halfLen, mid); map[i]++; } } }}

转载地址:http://srtba.baihongyu.com/

你可能感兴趣的文章
unity3鼠标点击移动
查看>>
Linux 安装中文包
查看>>
谷物大脑
查看>>
访问控制-禁止php解析、user_agent,PHP相关配置
查看>>
AgileEAS.NET之系统架构
查看>>
python3.5里的正则表达式
查看>>
Exchange server 2013 SP1 客户端会议室邮箱自动回复延迟
查看>>
nginx反向代理缓存服务器构建
查看>>
RHEL6 搭建LVS/DR 负载均衡集群 案例
查看>>
以太坊·Rinkeby 测试网络
查看>>
字符串按规则排序算法
查看>>
MPLS + BGP高级特性
查看>>
plist文件读写操作
查看>>
oracle resetlogs和noresetlogs 创建控制文件区别
查看>>
2013-7-17学习作业练习
查看>>
ZAM 3D入门教程(4):Extrusion编辑器
查看>>
《深入实践Spring Boot》一第2章 在Spring Boot中使用数据库2.1 使用MySQL
查看>>
C++语言基础 例程 字符串类
查看>>
堆排序
查看>>
Java的热部署(后期完善)
查看>>