遇到这样一个问题,请几大家给个比较好的算法,提供一个思路,有这样一个字符串
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

解决方案 »

  1.   


    $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