Создать список строк в порядке возрастания в лексикографическом порядке
Я хочу создать алгоритм, в котором я хочу получить следующую строку в лексикографическом порядке.
Предположим, я хочу создать список длиной 26, тогда это
['a','b'....'z']
Теперь предположим, что я хочу создать список длиной 260, тогда это
['a0','a1','a2'...'a9','b1'....'z0'....'z9']
Этот тип алгоритма имеет максимальный предел. Но я не хочу такого рода ограничений. Это может быть 10000 или 1 миллион.
требование
Алгоритм должен работать таким образом, чтобы ранее строка передавалась как генерируемый им аргумент. И он должен производить следующую строку в лексикографическом порядке. И я не хочу использовать метку времени (1503314045645)
Спасибо
1 ответ
Как насчет использования целых чисел в формате 36? Это выглядит так в Java:
String next(String prev) {
if(prev==null) {
return "0";
}
return Integer.toString(Integer.parseInt(prev, 36), 36);
}
На самом деле даже лучше, если вы используете простое целое число для хранения значения и просто увеличиваете его каждый раз, когда вам нужно следующее значение, и форматируете целое число, используя base 36, в строку:
Integer.toString(++value, 36);
В этом решении числа стоят перед буквами в выходных данных, поэтому вы получите следующие токены: a7,a8,a9,aa,ab, ... ax,ay,az,b0,b1 ... zx,zy, ZZ,100101
Если вам нужны буквы в первую очередь или какой-то конкретный порядок или дополнительные символы, используйте решение по ссылке Мэтта Тиммерманса.