python3实现字符串的全排列的方法(无重复字符)
抛出问题
求任意一个字符串的全排列组合,例如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实现字符串的全排列的方法(无重复字符)相关推荐
- python3数字全排列怎么搞_python3实现字符串的全排列的方法(无重复字符)
最近在学一些基础的算法,发现我的数学功底太差劲了,特别是大学的这一部分,概率论.线性代数.高数等等,这些大学学的我是忘得一干二净(我当时学的时候也不见得真的懂),导致现在学习算法,非常的吃力.唉!不说 ...
- LeetCode.3-最长无重复字符子串(Longest Substring Without Repeating Characters)
这是悦乐书的第341次更新,第365篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第2题Longest Substring Without Repeating Cha ...
- 找到字符串的最长无重复字符子串
题目: 给定一个字符串str,返回str中最长无重复字符子串的长度. 举例: str = "abcd",返回4. str = "aabcb",返回3. 基本思 ...
- python输入多个字符串、输入最长的一串_无重复字符的最长子串(Python之暴力求解)...
无重复字符的最长子串(Python之暴力求解) 例题: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: (1) 输入: "abcabcbb" 输出: 3 ...
- python字符串中最长的连续升序子串_Leetcode刷题练Python无重复字符的最长子串
这是一道字符串处理算法的题目,在日常编程中,处理字符串是常见任务.该题目会涉及到一个概念"滑动窗口". 一.题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度 ...
- [贪心|字符串] leetcode 3 无重复字符的最长子串
[贪心|字符串] leetcode 3 无重复字符的最长子串 1.题目 题目链接 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例1: 输入: "abcabcbb" ...
- python重复字符串n次的函数_LeetCode_Python(3)_无重复字符的最长子串
需求 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc ...
- 【无重复字符的最长子串--三种方法】
目录: 前言 一.题目 --无重复字符的最长子串 (一)双层循环 1.题目分析 2.图解 3.示例 (二)滑动窗口 1.题目分析 2.图解 3.示例 (三)滑动窗口--改进 1.题目分析 2.图解 3 ...
- 常考数据结构与算法:找到字符串的最长无重复字符子串
题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同). 示例1 输入 [2,3,4,5] 返回值 4 示例2 输入 [2,2,3,4,3] 返回值 3 方法 ...
最新文章
- 学习成长就到鸿蒙思维,庆国庆,迎中秋,鸿蒙教育享双节99元开启思维之旅!!...
- Scalaz(23)- 泛函数据结构: Zipper-游标定位
- 【Python Turtle合集】”外面的花已经开得很像样了, 我看到风拥作一团, 前来庆贺“(春天来啦~)
- 【Qt】2D绘图之涂鸦板
- [JS]js中判断变量类型函数typeof的用法汇总[转]
- 动态加载和静态加载及其编译步骤
- silverlight 地图轨迹回放
- ESTORE OPENCART 清爽现代主题模板 ABC-0063
- python win32api win32gui win32con PyUserInput实现自动化脚本
- vim 编辑器常用命令
- EnableQ在线问卷调查引擎在学校教学评估中的作用
- 台式计算机关机后自行重启,台式电脑点关机后又自动重启怎么处理
- ttl转rs232发送十六进制_电脑USB转TTL串口RS232串口模块
- 听课笔记-名校启程大学规划课
- 上古卷轴5:重制版AFT管理随从导致瑟拉娜Serana有关的MOD眼睛变金色的问题解决
- 运动控制专题——PPU
- Win10的用户账户设置怎么取消?
- python生成递归json_python函数、递归、json模块操作
- 开店经验|如何开一家精品咖啡馆
- windows WSL2 使用Xfce+dummy虚拟显示+VNC显示方案
热门文章
- Grpc+Grpc Gateway实践一 介绍与环境安装
- spring计算方圆300km内其它城市(附完整代码)
- Android开发之JNI(一)--HelloWorld及遇到的错误解析
- JS-获取class类名为某个的元素-【getClass】函数封装
- LinkedList总结+数组栈Stack
- JProfiler学习笔记
- Infragistics NetAdvantage控件的使用:该关系不是此 DataView 指向的表的父关系
- java 爬虫 保存cookies_写爬虫,免不了要研究JavaScript设置cookies的问题
- laravel token ajax,Laravel中ajax post操作需要传递csrf token的最优化解决方式
- jsp项目在idea需要导入什么依赖_Java开发工具IntelliJ IDEA配置项目系列教程(五):模块依赖...