Я действительно трудное время разработки алгоритма для решения следующей задачи:Алгоритм группировки последовательных строк
Я буду принимать множество входов, как показано ниже:
$input = array('100', '101', '102', '110', '111', '112');
и выход должна быть строка, содержащая:
"100-102, 110-112".
в основном то, что мне нужно сделать, это номеров группы в последовательности, как от 100 до 102 и сформировать их в строке «100-102» так как все числа образуют последовательность. Но так как значение 110 не находится рядом с 102, значения 110 - 112 должны быть сгруппированы и сформирована строка «110-112».
Ввод не ограничивается числами это строки. Так что я буду ожидать входы нравится:
$input = array('N1', 'N2', 'N3', 'GX1', 'GX2', 'Z-3');
Следуя той же схеме, вывод должен быть:
"N1-N3, GX1-GX3, Z-3"
Мой псевдокод (я новичок) для решения данной проблемы для чисел по крайней мере есть:
$sequenceArr = [];
$string = '';
foreach(...){
if(nextValue == prevValue+1){
$sequenceArr[] = nextValue;
}else{
//form the string from the sequenceArr
//if the preceeding string doesn't conform to the pattern anymore.
}
}
проблема я думаю, что будет сталкиваться выше, если входы не отсортированы .. Я мог «сортировать» их, но как насчет строк со значениями символов в них? Я немного потерян, и я не думаю, что я пойду с этим решением.
* ОБНОВЛЕНО ДАЛЕЕ ОПИСАНИЕ:
Это будет просто простой алгоритм группировки, только последнее число будет указывать группировка,
AB-1-ДФ АБ-2-DF и АВ-3 -DF будет NOT сгруппированы в AB-1-DF-AB-3-DF. Это упрощает проблему, также префикс 0 не имеет значения, 001 и 002 могут быть сгруппированы как 1-2.
простое правило в основном это:
(character) - (number)
ABC - 1
Различие в характере означает совсем другое дело.
Проблема немного под определенным. Есть ли такие вещи, как 'ABC-1-DF, ABC-2-DF'? Вам нужно иметь дело с 0 префиксом '001, 002'? Что произойдет, когда есть несколько номеров, например. 'ABC-2-DF-1, ABC-3-DF-1, ABC-2-DF-2'? – nhahtdh
да .. будет много значений, но в основном последние цифры будут только те, которые будут иметь значение, поэтому ABC-1-DF и ABC-2-DF являются двумя отдельными вещами. Если его ABC-DF- 1 и ABC-DF-2, тогда они могут быть сгруппированы, спасибо, что заметили, что о префиксе ... нет, мне не нужно иметь дело с 0 префикс – muffin
i обновлено описание – muffin