当前位置:   article > 正文

字符串的全排列(剑指offer笔记)_字符串的排列 剑指

字符串的排列 剑指

题目输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

在牛客大侠都是调用的permutation()方法来实现全排列的,看的我很糟心,这里分享一下自己实现的一个方法。

关于删除一个元组中的重复元素,如果结果乱序这题是不能政策通过的,所以还是建议使用del/remove等方法。

算法的核心部分:

  1. for i in range(len(ss)):
  2. for j in self.Permutation(ss[0:i]+ss[i+1:]):
  3. s1.append(ss[i]+j)

完整代码:

  1. # -*- coding:utf-8 -*-
  2. import re
  3. from collections import Counter
  4. class Solution:
  5. def Permutation(self, ss):
  6. if len(ss) == 0:
  7. return []
  8. if len(ss) == 1:
  9. return [ss]
  10. s1=[]
  11. s2=[]
  12. L=[]
  13. flag = 0
  14. for i in range(len(ss)):
  15. for j in self.Permutation(ss[0:i]+ss[i+1:]):
  16. s1.append(ss[i]+j)
  17. #yield ss[i]+j
  18. #删除s1中的全部重复元素,只保留其中一个
  19. #利用remove 来删除不会改变原来的排列顺序
  20. for item in s1:
  21. if s1.count(item) >1 :
  22. s1.remove(item)
  23. flag += 1
  24. #用计数器的方式,能够自动删除重复元素,但会使原结果乱序
  25. #采用set()方法,能够自动删除重复元素,但会使原结果乱序
  26. c = Counter(s1)
  27. s = set(list(s1))
  28. #return list(set(s1))
  29. return s1


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/825994
推荐阅读
相关标签
  

闽ICP备14008679号