抛出问题

求任意一个字符串的全排列组合,例如a=‘123’,输出 123,132,213,231,312,321。(暂时假定字符串没有重复)

解决方案

目前有两种解决的方法

方法一:

def str_sort(s=''):if len(s) <= 1:return [s]str_list = []for i in range(len(s)):for j in str_sort(s[0:i] + s[i + 1:]):str_list.append(s[i] + j)return str_liststr_list = str_sort('abc')
print(len(str_list), str_list)

这种理解起来非常好理解,就是循环遍历每个字符,让每个字符打头,然后继续递归遍历后边的字符

方法二:

'''
Python学习交流,免费公开课,免费资料,
免费答疑,系统学习加QQ群:579817333
'''
#字符串任意两个位置字符交换
def str_replace(str, x, y):if x == y:return strx_val = str[x:x+1]y_val = str[y:y+1]if x < y:str = str[0:x] + y_val + str[x+1:y] + x_val + str[y+1:len(str)]else:str = str[0:y] + x_val + str[y+1:x] + y_val + str[x+1:len(str)]return str
#递归求结果
def str_sort(str,x):if x == len(str):        #当x为字符串的最大长度时返回当前字符交换的结果global str_liststr_list.append(str)returnfor i in range(x,len(str)):str = str_replace(str,i,x) #递归遍历第i个字符,str_sort(str,x+1)str = str_replace(str,x,i) #恢复字符串原来的顺序,便于下次遍历
s = 'abc'
global str_list
str_list = []
str_sort(s,0)
print(len(str_list), str_list)

这种方法在求解的思路上就已经有了很大的提升,不是像上一个靠“蛮力”去解决问题,这是递归的一种方式,大概原理就是,先保持前I个字符不变,遍历交换后边的字符,这样一直递归到,最后两个字符,然后再返回去改变倒数第三个字符,再次遍历后边的两位,直到三个字符的全部输出,也就是这样的顺序,

第一次输出  X(n),X(n-1),X(n-2),......X(3),X(2),X(1)第二次输出  X(n),X(n-1),X(n-2),......X(3),X(1),X(2)第三次输出  X(n),X(n-1),X(n-2),......X(2),X(3),X(1)第四次输出  X(n),X(n-1),X(n-2),......X(2),X(1),X(3)......

这个可能我讲的不是特别清楚,理解起来不是特别容易,这种方式经过我的测试,发现他更费时。

自我感觉两种方法区别不大,原理上是一样的,都是先确定前面的部分,处理后边的,从后往前走。

python3实现字符串的全排列的方法(无重复字符)相关推荐

  1. python3数字全排列怎么搞_python3实现字符串的全排列的方法(无重复字符)

    最近在学一些基础的算法,发现我的数学功底太差劲了,特别是大学的这一部分,概率论.线性代数.高数等等,这些大学学的我是忘得一干二净(我当时学的时候也不见得真的懂),导致现在学习算法,非常的吃力.唉!不说 ...

  2. LeetCode.3-最长无重复字符子串(Longest Substring Without Repeating Characters)

    这是悦乐书的第341次更新,第365篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第2题Longest Substring Without Repeating Cha ...

  3. 找到字符串的最长无重复字符子串

    题目: 给定一个字符串str,返回str中最长无重复字符子串的长度. 举例: str = "abcd",返回4.  str = "aabcb",返回3. 基本思 ...

  4. python输入多个字符串、输入最长的一串_无重复字符的最长子串(Python之暴力求解)...

    无重复字符的最长子串(Python之暴力求解) 例题: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: (1) 输入: "abcabcbb" 输出: 3 ...

  5. python字符串中最长的连续升序子串_Leetcode刷题练Python无重复字符的最长子串

    这是一道字符串处理算法的题目,在日常编程中,处理字符串是常见任务.该题目会涉及到一个概念"滑动窗口". 一.题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度 ...

  6. [贪心|字符串] leetcode 3 无重复字符的最长子串

    [贪心|字符串] leetcode 3 无重复字符的最长子串 1.题目 题目链接 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例1: 输入: "abcabcbb" ...

  7. python重复字符串n次的函数_LeetCode_Python(3)_无重复字符的最长子串

    需求 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc ...

  8. 【无重复字符的最长子串--三种方法】

    目录: 前言 一.题目 --无重复字符的最长子串 (一)双层循环 1.题目分析 2.图解 3.示例 (二)滑动窗口 1.题目分析 2.图解 3.示例 (三)滑动窗口--改进 1.题目分析 2.图解 3 ...

  9. 常考数据结构与算法:找到字符串的最长无重复字符子串

    题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同). 示例1 输入 [2,3,4,5] 返回值 4 示例2 输入 [2,2,3,4,3] 返回值 3 方法 ...

最新文章

  1. 学习成长就到鸿蒙思维,庆国庆,迎中秋,鸿蒙教育享双节99元开启思维之旅!!...
  2. Scalaz(23)- 泛函数据结构: Zipper-游标定位
  3. 【Python Turtle合集】”外面的花已经开得很像样了, 我看到风拥作一团, 前来庆贺“(春天来啦~)
  4. 【Qt】2D绘图之涂鸦板
  5. [JS]js中判断变量类型函数typeof的用法汇总[转]
  6. 动态加载和静态加载及其编译步骤
  7. silverlight 地图轨迹回放
  8. ESTORE OPENCART 清爽现代主题模板 ABC-0063
  9. python win32api win32gui win32con PyUserInput实现自动化脚本
  10. vim 编辑器常用命令
  11. EnableQ在线问卷调查引擎在学校教学评估中的作用
  12. 台式计算机关机后自行重启,台式电脑点关机后又自动重启怎么处理
  13. ttl转rs232发送十六进制_电脑USB转TTL串口RS232串口模块
  14. 听课笔记-名校启程大学规划课
  15. 上古卷轴5:重制版AFT管理随从导致瑟拉娜Serana有关的MOD眼睛变金色的问题解决
  16. 运动控制专题——PPU
  17. Win10的用户账户设置怎么取消?
  18. python生成递归json_python函数、递归、json模块操作
  19. 开店经验|如何开一家精品咖啡馆
  20. windows WSL2 使用Xfce+dummy虚拟显示+VNC显示方案

热门文章

  1. Grpc+Grpc Gateway实践一 介绍与环境安装
  2. spring计算方圆300km内其它城市(附完整代码)
  3. Android开发之JNI(一)--HelloWorld及遇到的错误解析
  4. JS-获取class类名为某个的元素-【getClass】函数封装
  5. LinkedList总结+数组栈Stack
  6. JProfiler学习笔记
  7. Infragistics NetAdvantage控件的使用:该关系不是此 DataView 指向的表的父关系
  8. java 爬虫 保存cookies_写爬虫,免不了要研究JavaScript设置cookies的问题
  9. laravel token ajax,Laravel中ajax post操作需要传递csrf token的最优化解决方式
  10. jsp项目在idea需要导入什么依赖_Java开发工具IntelliJ IDEA配置项目系列教程(五):模块依赖...