Визначення
Ранг слова визначається як положення слова, коли всі можливі перестановки (або розташування) його букв розташовані в алфавітному порядку, як у словнику, незалежно від того, чи мають значення слова чи ні.
Розглянемо ці два слова - «синій» і «побачений». Для початку ми б написали всі можливі розташування літер цих слів в алфавітному порядку:
"blue": "belu","beul","bleu","blue","buel","bule","eblu","ebul","elub","elbu","eubl",
"eulb","lbeu","lbue","lebu","leub","lube","lueb","ubel","uble","uebl","uelb",
"ulbe","uleb"
"seen": "eens","eesn","enes","ense","esen","esne","nees","nese","nsee","seen",
"sene","snee"
Тепер подивимось зліва і знайдемо положення потрібних нам слів. Ми бачимо, що слово "синій" знаходиться на 4-й позиції, а "побачене" - на 10-й позиції. Отже, ранг слова "синій" дорівнює 4, а "бачив" - 10. Це загальний спосіб обчислення чину слова. Переконайтеся, що ви почнете рахувати лише з 1.
Завдання
Ваше завдання - написати код, щоб взяти будь-яке слово як вхідне та відобразити його ранг. Ранг повинен бути результатом. Будьте уважні до слів, що містять повторні букви.
Приклади
"prime" -> 94
"super" -> 93
"bless" -> 4
"speech" -> 354
"earth" -> 28
"a" -> 1
"abcd" -> 1
"baa" -> 3
Ви можете припустити, що вхід повністю розміщений з малих літер, а вхід буде містити лише алфавітні символи . Також якщо введено порожній пробіл або недійсний рядок, ви можете повернути що завгодно.
Оцінка балів
Це код-гольф , тому найкоротший код виграє!
O(n log n)
чи менше. (вибачте, ні Python) Для мого подання (C ++) для вирішення тестування потрібно 2,53 секунди
['h', 'e', 'l', 'l', 'o']
, на відміну від 'hello'
?