美文网首页【python程序员面试宝典|程序员算法宝典】
【python】求一个字符串所有的排列?

【python】求一个字符串所有的排列?

作者: 阿牛02 | 来源:发表于2019-07-24 16:41 被阅读0次

    题目:设计一个程序,当输入一个字符串时,要求输出这个字符串的所有排列。例如输入字符串abc,要求输出由字符串a,b,c所能排列出来的所有的字符串:abc,acb,bac,bca,cba,cab。

    分析:递归法。以字符串abc为例子介绍对字符串进行全排列的方法。

    (1)首先固定第一个字符a,然后对后面两个字符b与c进行全排列。

    (2)交换第一个字符与后面的字符,即交换a与b,然后固定第一个字符b,接着对后面的两个字符a与c进行全排列。

    (3)由于第(2)步交换了a和b破坏了字符串原来的顺序,因此,需要再次交换a和b使其恢复到原来的顺序,然后交换第一个字符和第三个字符(交换a和c),接着固定第一个字符c,对后面的两个字符a与b求全排列。

    注:在使用递归方法求解的时候,需要注意以下两个问题:(1)逐渐缩小问题的规模,并且可以用同样的方法来求解子问题。(2)递归一定要有结束,否则会导致程序陷入死循环。

    code:

    # 交换字符数组下标为i和j对应的字符

    def swap(str, i, j):

        temp = str[i]

        str[i] = str[j]

        str[j] = temp

    # 对字符串中的字符串进行全排列

    # str为待排序的字符串,start为待排序的子字符串的首字符下标

    def Permutation(str, start):

        if str is None or len(str) < 0:

            return

        # 完成完全排列后输出当前排列的字符串

        if start == len(str) - 1:

            print("".join(str))

        else:

            i = start

            while i < len(str):

                # 交换start与i所在位置的字符

                swap(str, start, i)

                # 固定第一个字符,对剩余的字符进行全排列

                Permutation(str, start + 1)

                # 还原start与i所在位置的字符

                swap(str, start, i)

                i += 1

    def Permutation_transe(s):

        str = list(s)

        Permutation(str, 0)

    if __name__ == "__main__":

        s = 'abc'

        Permutation_transe(s)

    程序运行结果:

    abc

    acb

    bac

    bca

    cba

    cab

    相关文章

      网友评论

        本文标题:【python】求一个字符串所有的排列?

        本文链接:https://www.haomeiwen.com/subject/ghyzlctx.html