Python 查找排序字符串所需的最小字母交换量
我有一个问题,我需要找到排序字符串所需的最小字母交换量。每次移动时,我可以交换两个字符的位置(不一定相邻),我需要找到最小交换量 我以前在二进制中解决过类似的问题(要求位交换相邻)。因此,排序Python 查找排序字符串所需的最小字母交换量,python,sorting,Python,Sorting,我有一个问题,我需要找到排序字符串所需的最小字母交换量。每次移动时,我可以交换两个字符的位置(不一定相邻),我需要找到最小交换量 我以前在二进制中解决过类似的问题(要求位交换相邻)。因此,排序101010=>000111将返回6,但无法找到概括我的解决方案的方法: def sort(s): ones = 0 res = 0 for b in s: if b == "1": ones += 1 if
101010=>000111
将返回6
,但无法找到概括我的解决方案的方法:
def sort(s):
ones = 0
res = 0
for b in s:
if b == "1":
ones += 1
if b == "0":
res += ones
return res
我是否应该在这里合并
ord()
函数来改变问题,改为处理整数?如有任何提示,我们将不胜感激。最小互换数量取决于字母的排列顺序。例如,假设单词是“wonderful”
,那么排序顺序是“deflnoruw”
,循环是
,w→ d
,d→ l
l→ w
,o→ e
,e→ n
,n→ f
,f→ r
r→ o
u→ u
因此,您的算法将需要按照这个想法工作;这可能有助于调查发现实际进行排序的周期的方法。还要注意的是,当单词有重复的字母时,它比上面的例子要复杂一些。请尝试下面的程序。这将通过尝试从
0
到n-1
唯一交换来检查最小交换数,以获得长度为n
的字符串我用很少的字符串测试了它
input=list(“CAB”)
输出=列表(“AABBCC”)
def get_映射(输出、输入):
#创建输出到输入的映射,删除现有匹配项
map={}
对于zip中的i,j(输出,输入):
如果我=j:
如果我在地图上:
映射[i].追加(j)
其他:
map[i]=[j]
返回图
def get_链(映射、字符、查找、交换):
#创建元素链
如果我对问题的定义感到困惑。对于您发布的代码,sort('101010')==6
not000111
。您并没有真正排序或交换任何东西。Res是交换的最小数量。@Tomerikoo上述代码仅限于交换相邻位。编辑了问题。这可能很方便:
Number of swaps: 2