Создайте список строк в порядке возрастания в лексикографическом порядке

Я хочу создать алгоритм, в котором я хочу получить следующую строку в лексикографическом порядке.

Предположим, я хочу создать список длиной 26, тогда это

['a','b'....'z']

Теперь предположим, что я хочу создать список длиной 260, тогда это

['a0','a1','a2'...'a9','b1'....'z0'....'z9']

Этот тип алгоритма имеет максимальный предел. Но я не хочу таких ограничений. Это может быть 10000 или 1 миллион.

Требование

Алгоритм должен работать таким образом, чтобы ранее сгенерированная им строка передавалась в качестве аргумента. И он должен произвести следующую строку в лексикографическом порядке. И я не хочу использовать метку времени (1503314045645)

Спасибо


person abhaygarg12493    schedule 21.08.2017    source источник
comment
Поскольку увеличение строки не так полезно в реальной жизни, см. также: буквенно-цифровая последовательность"> stackoverflow.com/questions/43356549/   -  person Matt Timmermans    schedule 21.08.2017
comment
какой набор символов? Кроме того, в первом случае y не ['a', 'aa',...,'aaa...aaa(26 times)']? (Я считаю, что aa лексически меньше, чем b)   -  person vish4071    schedule 21.08.2017


Ответы (1)


Как насчет использования целых чисел в формате base 36? В java это выглядит так:

String next(String prev) {
  if(prev==null) {
    return "0";
  }
  return Integer.toString(Integer.parseInt(prev, 36), 36);
}

На самом деле даже лучше, если вы используете простое целое число для хранения значения и просто увеличиваете его каждый раз, когда вам нужно следующее значение, и форматируете целое число, используя базу 36, в строку:

Integer.toString(++value, 36);

В этом решении числа стоят перед буквами в выводе, поэтому вы получите следующие токены: a7,a8,a9,aa,ab, ... ax,ay,az,b0,b1 ... zx,zy, зз, 100, 101

Если вам сначала нужны буквы или нужен какой-то определенный порядок или дополнительные символы, используйте решение по ссылке Мэтта Тиммерманса.

person Selindek    schedule 21.08.2017