《剑指offer》字符串的排列

字符串全排列算法解析
本文详细解析了字符串全排列的算法实现,通过分治思想,将大字符串分割成小字符集进行运算,利用set去重并排序,最终实现字符串abc的所有可能排列。

本题来自《剑指offer》 字符串的排列

题目:

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

思路:

    采用分治的思想,将大的字符串进行分割成小的字符集运算。

  每次将其中的一个字符抽出,剩下的全排列,最后用set去重并且排序即可。

Python Code:

# -*- coding:utf-8 -*-
class Solution:
    def Permutation(self, ss):
        # write code here 
        res = []                         #存放结果值
        if ss:                           #输入参数不为空前提
            self.Perm(ss,res,'')         #刚开始为''
            res = list(set(res))         #思路是将全部的排列组合拼接起来,利用set去重
        return sorted(res)               #对结果值进行排序
    def Perm(self,ss,res,path):          #
        if ss == '':                     #如果ss全部被分割完毕,则将path保存
            res.append(path)
        else:
            for i in range(len(ss)):     #对ss进行分割
                self.Perm(ss[:i]+ss[i+1:],res,path+ss[i])#去除ss[i]剩下的进行全排列

总结:

转载于:https://www.cnblogs.com/missidiot/p/10783640.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值