求字符串的全排列

博客介绍了如何计算字符串的全排列,通过固定字符串的一个字符并递归处理剩余部分来实现。在Python中使用set集合存储结果以消除重复,C++代码中通过递归和交换字符实现,并检查重复的排列。
摘要由CSDN通过智能技术生成

输入一个字符串,打印出该字符串中字符的所有全排列,并按照字典排序的顺序,输入的字符串中可能有重复的字符。
从字符串的第一个字符开始,依次固定其一个字符,利用递归排列剩下的字符串。即将字符串看成两部分,一部分是固定的字符,另一部分是剩下的字符的全排列。对于python代码,用一个set集合存储,因为排序set集合的时候可以去除掉重复的部分。
python代码:

# -*- coding:utf-8 -*-
class Solution:
    def Permutation(self, ss):
        if len(ss) <= 1:
            return ss

        res = set()
        for i in range(len(ss)):
            for j in self.Permutation(ss[:i]+ss[i+1:]):
                res.add(ss[i]+j)


        return sorted(res)

将字符串的第一个元素看成第一部分,将后面的元素看成第二部分,将第一个元素与后面的元素交换,然后每次交换后再对后面的元素执行递归操作进行全排列。
首先确定递归的终止条件,即遍历到字符串最后一个字符为止,本题为begin == str.size()-1。
当到达此条件时,判断一下看看最终结果的vector里有没有重复的字符串,如果没有则添加到vector中,随后如果遍历条件没有达到,则使用递归的思想,先固定住字符串中的第一个元素,随后依次遍历后面的元素,与第一个元素进行交换,然后全排列后面的元素,最后再进行依次复位。
C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值