我们得到了一个字符串和该字符串的排列。
例如,一个输入字符串sandeep和一个permutation psdenae。
sandeep
psdenae
在原始字符串排列的排序列表中找到给定排列的位置。
给定长度为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”的字母。
这将是。“ 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位。
因此,通过这种方法,您可以轻松解决此问题。