遇到这样一个问题,请几大家给个比较好的算法,提供一个思路,有这样一个字符串
0111010110111
这个字符一共有13为,刚好第2,3,4,6,8,9,11,12,13位是1,则需要返回
2-4,6,8,9,11-13
也就是如果连续三位或者三位以上是1,则返回该位置连续1的位置
如果三个以下则直接返回该1出现的位置0111010110111
----->2-4,5,8,9,11-13
0111010110111
这个字符一共有13为,刚好第2,3,4,6,8,9,11,12,13位是1,则需要返回
2-4,6,8,9,11-13
也就是如果连续三位或者三位以上是1,则返回该位置连续1的位置
如果三个以下则直接返回该1出现的位置0111010110111
----->2-4,5,8,9,11-13
$str = "0111010110111";
$n = strlen($str);
$f = 0;
for($i=0;$i<$n;$i++)
{
if($str{$i} == "1")
{
if($f > 0)
$end = $i+1;
else
$start = $i+1;
$f++;
}
else
{
if($f > 2)
{
echo $start."-".$end.",";
}
elseif($f > 0)
{
echo $start.",";
if($f > 1)
{
echo $end.",";
}
}
$f = 0;
}
}
if($f > 2)
{
echo $start."-".$end.",";
}
elseif($f > 0)
{
echo $start.",";
if($f > 1)
{
echo $end.",";
}
}
结果:2-4,6,8,9,11-13