python3:实现字符串的全排列(有重复字符)
抛出问题
求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321。
解决方案
#字符串任意两个位置字符交换
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)):
if str[i] not in str[x:i]:
str = str_replace(str,i,x) #递归遍历第i个字符,
str_sort(str,x+1)
str = str_replace(str,x,i) #恢复字符串原来的顺序,便于下次遍历
else:
return
s = 'abcc'
global str_list
str_list = []
str_sort(s,0) print(len(str_list), str_list)
相较于有重复的方法,只是多了一步,也就是在遍历第i个元素前,做个判断,就是当前需要交换的字符是否是已经‘打头’,如果有了就忽略,继续执行
可能我解释的理解的也不是很到位,欢迎加Q交流 1156553820
python3:实现字符串的全排列(有重复字符)的更多相关文章
- python3实现字符串的全排列的方法(无重复字符)
		https://www.jb51.net/article/143357.htm 抛出问题 求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321.(暂时 ... 
- 求一字符串最长不重复字符子串的长度【Java 版】
		一. 前言 最近学习有点断断续续,整理的一些知识点要么不完整,要么完全没搞懂,不好拿上台面,还是先在草稿箱躺着吧.偶尔在浏览大牛博客http://coolshell.cn的时候,发现大牛业余时间也在做 ... 
- Cracking-- 1.1 判断字符串中是否有重复字符
		第三种方法为位运算的方法. 位运算符: << 左移 & 与 | 或 #include <iostream> #include <string> #incl ... 
- js-FCC算法-No repeats please字符串的全排列
		把一个字符串中的字符重新排列生成新的字符串,返回新生成的字符串里没有连续重复字符的字符串个数.连续重复只以单个字符为准 例如, aab 应该返回 2 因为它总共有6中排列 (aab, aab, aba ... 
- Leetcode——3. 无重复字符的最长子串
		难度: 中等 题目 Given a string, find the length of the longest substring without repeating characters. 给定一 ... 
- leetcode题目3.无重复字符的最长子串(中等)
		题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "a ... 
- LeetCode OJ -- 无重复字符的最长子串
		给定一个字符串,找出不含有重复字符的 最长子串 的长度. 示例: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3. 给定 ... 
- 滑动窗口经典题 leetcode 3. 无重复字符的最长子串
		题目 解题思路 题目要求找出给定字符串中不含有重复字符的最长子串的长度.这是一个典型的滑动窗口的题目,可以通过滑动窗口去解答. 滑动窗口 具体操作如下图示:找到一个子串 s[left...right] ... 
- python3:实现字符串的全排列(无重复字符)
		最近在学一些基础的算法,发现我的数学功底太差劲了,特别是大学的这一部分,概率论.线性代数.高数等等,这些大学学的我是忘得一干二净(我当时学的时候也不见得真的懂),导致现在学习算法,非常的吃力.唉!不说 ... 
随机推荐
- 海量数据处理之top K问题
			题目: CVTE笔试题https://www.1024do.com/?p=3949 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节. 假设目前有一千万 ... 
- 【Java集合系列二】LinkedList解析
			一.简介 1.LinkedList继承关系 2.LinkedList底层实现 LinkedList使用双向链表存储数据,所以没有默认的容量,也不会有扩容一说.只有两个指针,永远指向链表的两端:firs ... 
- Crontab中的除号(slash)到底怎么用?(转载)
			转载于:https://www.cnblogs.com/cocowool/p/5865397.html crontab 是Linux中配置定时任务的工具,在各种配置中,我们经常会看到除号(Slash) ... 
- 谷歌浏览器chrome的vuejs devtools 插件的安装
			(推荐方法2) 安装方法1: 需正常打开chrome商店,搜索vuejs devtools 安装.chrome://extensions/ 开发者工具-扩展程序下启用: 方法2: github下载插件 ... 
- ipone 5s上,字体rem遇到的问题
			webapp中,12px的字体,利用rem实现自适应布局, 发现只有在ipone 5s中字体超大, 这两个class元素中字体一样大小,发现上面元素字体在ipone 5s中很大, 后来验证问题在哪里, ... 
- xpath提取到的中文乱码时的解决办法
			βҳ转换为正常的中文: 
- 小程序点击按钮清空input
			大致的思路是先给标签input设置一个value <input value="{{value}}" placeholder="最大输入长度10"/> ... 
- 本地maven库导入架包
			mvn install:install-file -DgroupId=com.alipay -DartifactId=sdk-java -Dversion=20170725114550 -Dpacka ... 
- Reasoning With Neural Tensor Networks For Knowledge Base Completion-paper
			https://www.socher.org/index.php/Main/ReasoningWithNeuralTensorNetworksForKnowledgeBaseCompletion 年份 ... 
- bzoj 2460 线性基
			#include<bits/stdc++.h> #define ll long long #define LL long long #define int long long using ... 
