• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[Swift]LeetCode267.回文全排列II$PalindromePermutationII

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10230174.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

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

Hint:

  1. If a palindromic permutation exists, we just need to generate the first half of the string.
  2. To generate all distinct permutations of a (half of) string, use a similar approach from: Permutations II or Next Permutation.

 给定的字符串S,回报所有的palindromic置换(没有duplicates)的信息。返回的列表,如果没有空palindromic -可以排列形式。

例如:

给定s = "aabb",返回的 ["abba", "baab"].

 给定 s = "abc",,返回 [ ]。

提示: 

  1. 如果一palindromic排列是否,我们只需要两个Generate的第一个字符串。
  2. Generate置换成不同的两个全(半)的字符串,用相似的方法:Permutations II 或者 Next Permutation.。

 1 class Solution {
 2     func generatePalindromes(_ s:String) -> [String]{
 3         var res:Set<String> = Set<String>()
 4         var m:[Character:Int] = [Character:Int]()
 5         var t:String = ""
 6         var mid:String = ""
 7         for a in s.characters
 8         {
 9             m[a] = 1
10         }
11         for (key, val) in m
12         {
13             if val % 2 == 1
14             {
15                 mid.append(key)
16             }
17             var str:String = String()
18             for i in 0..<val/2
19             {
20                 str.append(key)
21             }
22             t += str
23             if mid.count > 1
24             {
25                 return []
26             }
27         }
28         permute(&t, 0, mid,&res);
29         return Array(res)
30     }
31     
32     func permute(_ t:inout String,_ start:Int,_ mid:String,_ res:inout Set<String>)
33     {
34         if start >= t.count
35         {
36             let str:String = String(t.reversed())
37             res.insert(t + mid + str)
38         }
39         for i in start..<t.count
40         {
41             if i != start && t[i] == t[start]
42             {
43                 continue
44             }
45             var temp:Character
46             temp = t[start]
47             t[start] = t[i]
48             t[i] = temp
49             
50             permute(&t, start + 1, mid, &res)
51             
52             temp = t[start]
53             t[start] = t[i]
54             t[i] = temp
55         }
56     }
57 }
58 
59 extension String {        
60     //subscript函数可以检索数组中的值
61     //直接按照索引方式截取指定索引的字符
62     subscript (_ i: Int) -> Character {
63         //读取字符
64         get {return self[index(startIndex, offsetBy: i)]}
65         
66         //修改字符
67         set
68         {
69             var str:String = self
70             var index = str.index(startIndex, offsetBy: i)
71             str.remove(at: index)
72             str.insert(newValue, at: index)
73             self = str
74         }
75     }
76 }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
swift项目第七天:构建访客界面以及监听按钮点击发布时间:2022-07-13
下一篇:
[Swift]键盘遮挡控件发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap