Если у вас есть строка длины n
, состоящая из n
разных букв, то номер, который вы найдете, это: n * (n - 1) * (n - 2) * (n - 3)/8
.
Причина: Есть C(n, 4)
способов выбрать 4
несоответствие мест от n
писем, и для каждой такой четверки существует три способа их сопряжения.
Следовательно, результат C(n, 4) * 3 = n * (n - 1) * (n - 2) * (n - 3)/8
.
Здесь гипотеза состоит в том, что все буквы в строке различны. Из вашего описания проблемы неясно, могут ли буквы повторяться. Прокомментируйте этот ответ, если это ваш случай. Затем я обновлю ответ.
Редактировать: Теперь предположим, что буквы могут повторяться. Ситуация сложнее. Я просто дам эскизы здесь.
Скажем, строка содержит m
разных букв, встречающихся a_1, ..., a_m
раз, соответственно. Также напишите b_i
на номер C(a_i, 2)
.
Есть три случая:
- Случай 1: четыре несовпадений образуют два одинаковых пары, например, два a и два b перераспределены.
В этом случае у нас есть sum{b_i * b_j : 1 <= i < j <= m}
разные строки. Это равно (sum{b_i}^2 - sum{b_i ^2})/2
, выражение, которое может быть оценено в O(m)
времени.
- Случай 2: четыре несоответствия содержат три разных буквы, например. один в паре с одним б, а другой в паре с одним с.
В этом случае сначала выберите букву, которая является общей для двух пар, допустим, это i
-я буква; то нужно выбрать две другие буквы.
Напиши s
на сумму a_i
и t
на сумму b_i
. Если мы выберем две произвольные буквы из оставшихся s - a_i
букв, мы должны исключить случаи, когда две буквы идентичны, что имеет t - b_i
возможностей. Таким образом, есть C(s - a_i, 2) - (t - b_i)
различные способы выбора двух других букв, поэтому b_i * (C(s - a_i, 2) - (t - b_i))
разные строки. Суммирование их для всех i
дает общее количество различных строк в этом случае. Он все еще может быть оценен в O(m)
времени.
- Дело 3: четыре разных буквы, например. один и один б образуют пару, и один с и один д форма другая пара.
Идея такая же. Во-первых, рассмотрим возможность выбора произвольных букв s
. Затем мы должны исключить несколько случаев:
i. Все четыре буквы идентичны, у этого есть sum{C(a_i, 4)}
чехлы;
ii.Три буквы идентичны, четвертый - другой, у этого есть sum{C(a_i, 3) * (s - a_i)}
случаях;
iii. Две буквы идентичны, две другие одинаковы, это точно число, рассчитанное в случае 1;
iv. Две буквы идентичны, другие две разные, это точно число, рассчитанное в случае 2.
Итак, общее количество возможностей выбора четырех разных букв из всех писем s
: C(s, 4) - [i] - [ii] - [iii] - [iv]
. Как и раньше, это число должно быть умножено на 3
, чтобы получить количество различных строк, поскольку каждая четверка дает 3
разные строки.
В целом, временная сложность O(m)
, что, очевидно, оптимально.
Да, на самом деле я хочу получить формулу для случая, когда буквы повторяются, скажем, «abbc». –
Вы также сможете опубликовать другое подробное объяснение (как и для выше) для строки, содержащей повторяющиеся буквы (было бы предпочтительнее, если вы возьмете пример like- abbbbcccdeff). Это будет очень полезно. –
@RachitBelwariar См. Редактирование. – WhatsUp