当前位置: 首页 > 知识库问答 >
问题:

按字典顺序排列的最小字符串的排列数

拓拔麒
2023-03-14

我在寻找字典上最小的字符串的排列数。

例如,< code>bbaa现在,字典上最小的字符串是< code>aabb,因此,排列是,

< code>(1,2,3,4),(2,1,3,4),(1,2,4,3),(2,1,4,3)也就是4。

我对它的想法(在python中)是找到最小的字符串(基本上将其排序为字符串),然后创建一个计数器来存储每个字符的计数。

因为,我们不需要一个在字典上变得更大的字符串,我们只能交换相同的字符。

就像,aaabbbcc 所以,a 有 3 个地方,b 有 3 个地方,c 只有 2 个地方。

这使得排列的数量成为可能,(3*3*2)

这可以通过将计数器的值相乘来实现。但这种方法错过了一些重要的东西,因为显然,它没有通过。我找到了一个字符串,它偏离了这种方法:

hjkegfghjkdcoiuyg

长度:18

已排序: 查德菲格海吉库伊

计数器:

计数器

编辑:

所以根据我的算法,答案应该是24,如上所述。但实际答案是48,这是两次,我试图找出一些关系,或者可能是一个愚蠢的错误,但没有愚蠢的错误。


共有2个答案

蒋权
2023-03-14
匿名用户

计算排列是用阶乘来完成的。你的答案应该是< code>3!* 2!* 2!* 2!

孙成益
2023-03-14

您需要乘以字符计数的阶乘。这是因为3个相同的字母创建3!=6置换:(1,2,3)(1,3,2)(2,1,3)(2,3,1)(3,1,1)(3,2,1)

在本例中,3!*2! * 2! * 2! = 6*2*2*2=48

 类似资料:
  • 按字母顺序排序字符串中的字符。 使用扩展运算符(...),Array.sort() 和 String.localeCompare() 对 str 中的字符进行排序,使用 String.join('') 重新组合。 const sortCharactersInString = str => [...str] .sort((a, b) => a.localeCompare(b))

  • 问题内容: 我有一个带有文件名的字符串列表: 输出: 但是我想要: 有没有简单的方法可以做到这一点? 问题答案: 是: 说明:字符串按词法排序,因此在字符串之前(因为< ,因此忽略第一个字符串之后的内容)。因此,我们使用的参数是一个回调函数,该函数接受一个列表项并返回用于对该项目进行排序的值- 在您的情况下,是从文件名的第一部分构建的整数。这样,列表就可以正确地按数值排序。

  • 问题内容: 我是Java的新手,正在尝试按字母顺序排列术语的arrayList。(一个术语定义为一个字符和一个整数)(例如 我的代码如下: 为什么这不起作用?以及我该如何完成呢?我的arrayList称为术语,填充有Term类型 问题答案: 您在这行代码中遇到的问题。您的课程不是So 的类型,这两个对象将基于哪个属性或条件方法? 您必须使您的类为Comparable类型。和,根据您的需要覆盖该方法

  • 根据字典顺序和自定义顺序对字符串数组进行排序(一种排列形式)。这是代码: 问题是,当我对一些输入运行此命令时,输出是正确的,而对于其他输入,输出是不正确的。我一直在调试它,但没有找到错误。 编辑: 阿德里安娜正在玩英文字母表。当她玩完字母表后,她意识到她把字母的位置弄乱了。现在,给定一组单词,她想知道根据她制作的新字母表排序,这些单词的字典排序是什么。 换句话说,给定英语字母表E和一组单词S的排列

  • 问题内容: 我已经在Redis中使用排序集实现了排行榜。我希望具有相同分数的用户按时间顺序排序,即,第一名的用户应排名更高。当前,redis支持词典顺序。有没有一种方法可以覆盖它。手机号码被用作排序集中的成员。 我想到的一种解决方案是在移动电话号码之前添加时间戳,并维护散列以映射移动电话号码和时间戳。 这样,在任何情况下,我都可以通过从哈希添加前缀来获得给定用户的排名。 现在这不是我想要的。这将与

  • 问题内容: 这是我查询的结果,但顺序不正确。我想按最后2个字符排序。结果应为:下面。 我的查询: 第二:sqlfiddle 问题答案: 试试这个: 检查 SQL FIDDLE DEMO 输出