gpt4 book ai didi

php - 对顺序字符串进行分组的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:50:30 26 4
gpt4 key购买 nike

我真的很难设计一个算法来解决以下问题:

我将接受如下输入数组:

$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-DF AB-2-DF 和 AB-3-DF 将分组到 AB-1-DF - AB-3-DF。这简化了问题,0 前缀也无关紧要,001 和 002 可以分组为 1-2。

简单的规则基本上是这样的:

(character) - (number)
ABC - 1

性格不同意味着完全不同的事情。

最佳答案

如果顺序项彼此相邻,那么这里应该可以工作。您可能想要编写自己的 are_sequential 函数:

$input = ["1","2","4","6","7","8"];

$len = count($input);
$result = [];

function are_sequential($a,$b){
return $a + 1 == $b;
}

$i = 0;

while ($i < $len - 1){
$first = $input[$i];
$last = $input[$i];
$i++;
$sequenceLength = 1;
while (are_sequential($last, $input[$i])){
$last = $input[$i];
$sequenceLength++;
if ($i < $len - 1){
$i++;
}
}
if ($sequenceLength > 1){
$result[] = $first . "-" . $last;
} else {
$result[] = $first;
}
}

var_dump($result);

输出:

array(3) {
[0]=>
string(3) "1-2"
[1]=>
string(1) "4"
[2]=>
string(3) "6-8"
}

关于php - 对顺序字符串进行分组的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26334520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com