【发布时间】:2015-06-10 16:02:42
【问题描述】:
我们得到一个任意字符串。现在,我们可以对这个字符串执行一些操作。 任何字母都可以转换为任何其他字母。现在,我们可以从字符串中选择任何字母并将其转换为任何其他字母。这将被称为一个单一的操作。
我们怎样才能将一个字符串转换成一个字符串,其字母按上述最少操作数排序?
欢迎所有解决方案,包括开箱即用的解决方案!
P.S.:这是一个例子-
Given string: dcba
We can convert this string into a sorted using at least 3 operations. The generated string can be any of the following:
dddd (3 operations)
aaaa (3 operations)
cccc (3 operations)
..
etc.
P.P.S.:正如一些人所问的,我在这里提供自己的解决方案-
蛮力解决方案之一是利用递归。当我们处于字符串的某个字符索引处时,我们要么不更改它,要么将其更改为其他字符,然后递归调用索引加一的函数。如果我们改变字符,增加编号。 1 的操作,否则按原样传递。在递归的每一步,我们可以检查字符串是否排序 - 如果是,则使用当前计数更新整体最小值,如果它小于当前计数。
【问题讨论】:
-
这不是任何传统定义的“排序”...
-
当然。更新了标题!
-
@Mohammad 这是错误的,因为问题要求“此类移动的最小数量”。这就像说我们可以通过在我们得到它时返回它来对数组进行排序——有一种情况是它已经排序,然后它是正确的——但仅此而已。问题不是如何让它排序,问题是如何让它以最少的移动次数排序,这里重要的输出不是排序后的字符串,而是交换次数。
-
所以达到最小值的计算复杂度是无关紧要的?
-
这种算法的实际应用是什么?
标签: c++ string algorithm sorting