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

抛出问题

求任意一个字符串的全排列组合,例如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_list

str_list = str_sort('abc')

print(len(str_list), str_list)

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

方法二:

#字符串任意两个位置字符交换

def str_replace(str, x, y):

if x == y:

return str

x_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_list

str_list.append(str)

return

for 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实现字符串的全排列的方法(无重复字符)相关推荐

  1. python3实现字符串的全排列的方法(无重复字符)

    抛出问题 求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321.(暂时假定字符串没有重复) 解决方案 目前有两种解决的方法 方法一: def str_ ...

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

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

  3. 牛客题霸 [找到字符串的最长无重复字符子串] C++题解/答案

    牛客题霸 [找到字符串的最长无重复字符子串] C++题解/答案 题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同). 题解: i和j两个指针分别指不重复子 ...

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

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

  5. 求字符串中最长无重复字符的子串

    题目:求一个字符串中最长的没有重复字符的子串. 思路:用hash表从i遍历查看包含i的最长 无重复子串. int max_unique_substring2(char * str) {int i,j; ...

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

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

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

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

  8. 【LeetCode笔记】3. 无重复字符的最长子串(JAVA、滑动窗口、字符串)

    文章目录 题目描述 思路 && 代码 1. 之前的版本 更新 2.0 题目描述 子串:各字符间必须要相邻,而非子序列 使用滑动窗口来做就行 思路 && 代码 1. 之前 ...

  9. 《程序员代码面试指南》第五章 字符串问题 找到字符串的最长无重复字符子串...

    题目 找到字符串的最长无重复字符子串 java代码 努力中.... 转载于:https://www.cnblogs.com/lizhouwei/p/8955166.html

最新文章

  1. ros::spinOnce()机制 有点东西
  2. 报名 | 统计学概论和医疗临床大数据分析讲座
  3. vue 分模块打包 脚手架_vue-cli分模块独立打包
  4. C++:类-多态的学习和使用
  5. dijkstra算法原理_这 10 大基础算法,程序员必知必会!
  6. ni软件可以卸载吗_黑科技 | 2020全新AI人工智能修图汉化版软件!这下可以放心卸载PS啦!...
  7. 【算法刷题2】二叉树的后序遍历
  8. oracle 不等函数,SQL(Oracle)日常使用与不常使用函数的汇总
  9. Java国际化概念和使用介绍
  10. laravel获取当前的url以及当前的基础域名方法汇总
  11. 中低频量化交易策略研发05_推进分析
  12. 黑客已经盗了 $15,945,221.72 美元!
  13. php做网页的流畅,Easying轻量流畅
  14. nginx升级与回退
  15. python自动化测试怎么提高效率_自动化测试更适合缺陷预防,而不是提高测试效率...
  16. excel 工作表保护密码破解代码
  17. 使用Matlab对大地测量学中的大地坐标和大地空间直角坐标进行相互转换
  18. ERROR: No matching distribution found for cv2解决方案
  19. 基于神经网络识别抑郁症附matlab代码
  20. 冰箱的矢量变频技术是什么

热门文章

  1. ubuntu下搭建一个数据化处理的开发环境
  2. Linux驱动技术(三) _DMA编程
  3. Oracle数据表和Constraint管理
  4. BUG管理系统(Mantis)迁移实录
  5. XML格式对象序列化(2)
  6. Windows Server 2003活动目录:管理特征
  7. ORIG1和ORIG2的运用
  8. 802.11协议中的action帧的使用
  9. PAT甲级1028 List Sorting:[C++题解]排序,cin和cout会超时
  10. 汤家凤高等数学基础手写笔记-曲线与曲面积分