Если присмотреться к хэш-функции, она работает как система счисления (например, шестнадцатеричная), где вес цифр равен 31. То есть, думайте, что это преобразование числа в основание 31, и это делает ваш окончательный хешкод наподобие hashCode = (31^n) * first-char + (31^n-1) * second-char + ..... + (31^0) * last-char
Второе наблюдение состоит в том, что расстояние ASCII между заглавной и строчной буквой равно 32. Объясняется в терминах хэш-функции, это означает, что когда вы заменяете заглавную букву маленькойодин, это означает, что вы добавляете еще 1 к старшей цифре и 1 к вашей текущей цифре.Например:
BB = (31)(B) + (31^0)B
, что также равно (31)*(B - 1) + (31^0)*(31 + B)
, обратите внимание, что я только что взял одну единицу из старшей цифры и добавил к младшей цифре без изменения общего значения.Последнее уравнение равно (31)*(A) + (a) == Aa
Итак, чтобы сгенерировать всю возможную строку заданного хеш-кода, начните с начальной строки и сдвиньте символ справа налево, заменив маленький символ на заглавнуюодин, уменьшая один из более высокого местоположения (где применимо).Вы можете запустить это в O (1)
Надеюсь, это поможет.