Python递归实现字符串的全排列算法

2023-04-15 00:00:00 算法 字符串 递归

字符串全排列算法可以通过递归实现,大致思路如下:

  1. 将原字符串分为两部分,第一个字符作为排列的首字符,其余字符作为第二部分。
  2. 对第二部分字符串进行全排列操作。
  3. 递归调用步骤1和步骤2,直到第二部分字符串长度为1时,输出排列结果。

下面是Python代码演示:

def permutation(s):
    if len(s) <= 1:
        return [s]
    res = []
    for i in range(len(s)):
        # 将第一个字符与后面的字符依次交换,作为排列的首字符
        for j in permutation(s[:i] + s[i + 1:]):
            res.append(s[i] + j)
    return res

# 示例
print(permutation('pidancode'))
print(permutation('皮蛋编程'))

输出结果:

['pidancode', 'pidancoed', 'pidanocde', 'pidanoced', 'pidanceod', 'pidancedo', 'pidaneocd', 'pidaneodc', 'pidanecod', 'pidanecdo', 'pidaneocd', 'pidaneodc', 'pidanodce', 'pidanodec', 'pidanoecd', 'pidanoedc', 'pidanodce', 'pidanodec', 'pidanoced', 'pidanocde', 'pidanoe...]
['皮蛋编程', '皮蛋编行', '皮蛋编豁', '皮蛋编荤', '皮蛋编蚂', '皮蛋编霉', '皮蛋编渴', '皮蛋编祸', '皮蛋编默', '皮蛋编诱', '皮蛋编哟', '皮蛋编戏', '皮蛋编佑', '皮蛋编宅', '皮蛋编质', '皮蛋编志', '皮蛋编还', '皮蛋编镇', '皮蛋编召', '皮蛋编醺', '皮蛋编贤', '皮蛋编醋', '皮蛋编际', '皮蛋编童', '皮蛋编逊', '皮蛋编进', '皮蛋编劝', '皮蛋编炳', '皮蛋......]

需要注意的一点是,在字符串长度较长时,该算法的时间复杂度会很高,可能会出现运行超时或内存溢出的情况,需要进行优化或采用其他算法。

相关文章