小编典典

在给定字符串排列的排序列表中找到给定排列的索引

algorithm

我们得到了一个字符串和该字符串的排列。

例如,一个输入字符串sandeep和一个permutation psdenae

在原始字符串排列的排序列表中找到给定排列的位置。


阅读 224

收藏
2020-07-28

共1个答案

小编典典

给定长度为n的字符串的排列总数将为 n! (如果所有字符都不同),则不可能探索所有组合。

这个问题实际上就像数学的P&C问题

按字典顺序排列时,查找单词“ stack”的等级。

在输入字符串为NILSU的情况下,取一个单词,我们必须找到其排名。 以“ SUNIL”为例。

现在按字母顺序排列“ SUNIL”的字母。

这将是。“ ILNS U”。

现在拿第一个字母。它的“我”。现在检查,字母“ I”是“ SUNIL”的第一个字母吗?否。可以从I开头形成的单词数将为4 !,因此我们知道将有4 !!“
SUNIL”之前的单词。

我= 4!= 24

现在去第二个字母。它的“ L”。现在再次检查我们是否要把这封信放在第一位?不能。因此可以从“ L”开始形成的单词数将为4!。

L = 4!= 24

现在去“ N”。这是我们想要的吗?否。写下可以从“ N”开始的单词数,再次为4!

N = 4!= 24

现在去“ S”。这就是我们想要的吗?是。现在,从按字母顺序排列的单词中删除字母。现在将是“ ILN U”

写S并在列表中再次检查单词。我们要SI吗?否。所以可以从SI开头的单词数是3!

[S]:I-> 3!= 6

去L吧。我们要SL吗?不,所以它将是3!。

[S]:L-> 3!= 6

去N。我们要SN吗?没有。

[S]:N-> 3!= 6

去SU吧。这是我们想要的吗?是。从列表中剪切字母U,然后将其为“ IL
N”。现在尝试I。我们要使用SUI吗?否。因此,从SUI开始可以形成的单词数将为2!

[SU]:I-> 2!= 2现在去找L。我们要“ SUL”。不,所以以SUL开头的单词数将为2!。

[SU]:L-> 2!= 2

现在去N。我们要SUN吗?是的,现在删除那封信。这将是“ IL”。我们要“ SUNI”吗?是。删除那封信。剩下的唯一字母是“ L”。

现在去找L。我们要SUNIL吗?是。SUNIL是第一个选择,所以我们有1!。[SUN] [I] [L] = 1!= 1

现在加上我们得到的整数。总和是。

24 + 24 + 24 + 6 + 6 + 6 + 2 + 2 +1 = 95。

因此,如果我们计算可以使用按字典顺序排列的SUNIL字母创建的单词,则SUNIL单词将位于第95位。

因此,通过这种方法,您可以轻松解决此问题。

2020-07-28