微信人生里面微网站怎么做,wordpress 第三方登录 代码,营销推广活动,公共资源交易中心待遇文章目录1. 题目2. 解题1. 题目
给定一个字符串 s #xff0c;返回其通过重新排列组合后所有可能的回文字符串#xff0c;并去除重复的组合。
如不能形成任何回文排列时#xff0c;则返回一个空列表。
示例 1#xff1a;
输入: aabb
输出: [abba返回其通过重新排列组合后所有可能的回文字符串并去除重复的组合。
如不能形成任何回文排列时则返回一个空列表。
示例 1
输入: aabb
输出: [abba, baab]示例 2
输入: abc
输出: []来源力扣LeetCode 链接https://leetcode-cn.com/problems/palindrome-permutation-ii 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 2. 解题
对字符进行计数判断能否生成回文串然后把奇数个的1个字符放中间回溯在字符两侧放一对相同的字符
class Solution {vectorstring ans;int n;
public:vectorstring generatePalindromes(string s) {vectorint count(128,0);n s.size();for(char ch : s)count[ch];int odd 0, idx;for(int i 0; i 128; i){if(count[i]1){odd;idx i;}if(odd 1)return {};}s odd ? string(1, idx) : ;odd ? count[idx]-- : 0;//奇数的字符-1dfs(count,s);return ans;}void dfs(vectorint count, string s){if(s.size()n){ans.push_back(s);//长度够了返回return;}for(int i 0; i 128; i){if(count[i]){count[i] - 2;//两侧加上相同字符还是回文dfs(count, char(i)schar(i));count[i] 2;//回溯}}}
};4 ms 6.9 MB 我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号Michael阿明一起加油、一起学习进步 我的博客即将同步至腾讯云社区邀请大家一同入驻https://cloud.tencent.com/developer/support-plan?invite_code2bs1ihf8vfpcc