267. Palindrome Permutation II

来源:互联网 发布:linux如何修改文件权限 编辑:程序博客网 时间:2024/05/20 15:42

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 [].

以map[256]作为词袋存储字符,更新字符串时采用‘char’ + curr + 'char'的形式,保证每次都是回文。代码如下:

public class Solution {    public List<String> generatePalindromes(String s) {        List<String> res = new ArrayList<String>();        int[] map = new int[256];        for (char ch: s.toCharArray()) {            map[ch] ++;        }        int count = 0;        int j = 0;        StringBuilder builder = new StringBuilder();        for (int i = 0; i < 256; i ++) {            if (count == 0 && map[i] % 2 == 1) {                j = i;                count ++;            } else if (map[i] % 2 == 1) {                return res;            }        }        if (j != 0) {            map[j] --;            builder.append((char)j);        }        helper(res, builder, map, s.length());        return res;    }        private void helper(List<String> list, StringBuilder builder, int[] map, int len) {        if (builder.length() == len) {            list.add(builder.toString());        }        for (int i = 0; i < map.length; i ++) {            if (map[i] <= 0) {                continue;            }            map[i] -= 2;            char temp = (char)i;            builder.insert(0, temp).append(temp);            helper(list, builder, map, len);            builder.deleteCharAt(0);            builder.deleteCharAt(builder.length() - 1);            map[i] += 2;        }    }}

0 0
原创粉丝点击