Это вопрос интервью:Представляют слово с алфавитом
Imagine an alphabet of words. Example:
a ==> 1
b ==> 2
c ==> 3
.
z ==> 26
ab ==> 27
ac ==> 28
.
az ==> 51
bc ==> 52
and so on.
Такими, что последовательность символов должна быть только в порядке возрастания (абы допустимы, но ба не является). Если какое-либо слово печатает свой индекс, если он действителен и 0, если нет.
Input Output
ab 27
ba 0
aez 441
Примечание: Грубая сила не допускается. Вот ссылка на вопрос: http://www.careercup.com/question?id=21117662
Я могу понять, что решение, как:
- Итоговые слов равно 2^26 -1.
- Для данного слова сначала слова с небольшим размером.
- Пусть п длина слова,
- Общее количество слов с размером меньшим, чем п представляет собой С (26, 1) + С (26, 2) + ... + С (26, п - 1)
- Затем рассчитать, как много слов с одинаковым размером до заданного слова
- сумма двух чисел plusing один является результатом
Ссылка: sites.google.com/site/spaceofjameschen/annnocements/printtheindexofawordwithlettersinascendingorder - microsoft
В образце решения я понял, как автор рассчитал количество слов с размером меньше слова.size(). Но в коде я не слишком уверен в том, как найти число слов такого же размера, как word.size(), которые встречаются перед словом.
Именно этот бит:
char desirableStart;
i = 0;
while(i < str.size()){
desirableStart = (i == 0) ? 'a' : str[i - 1] + 1;
for(int j = desirableStart; j < str[i]; ++j){
index += NChooseK('z' - j, str.size() - i - 1); // Choose str.size() - i - 1 in the available charset
}
i ++;
}
Может кто-то помочь мне понять этот бит? Благодарю.
Вы должны изучить проблему на бумаге, прежде чем писать код. Попробуйте примеры, алгоритмы проектирования и тестирования и докажите правильность. Кодирование - это отвлечение. Компьютеры могут помочь вам рассчитать, но они не могут помочь вам * подумать *. –