2014-11-06 2 views
0

특히 몇 번의 '줄무늬'를 계산하려고합니다. 특히 연속적으로 가장 많은 수의 승리와 손실이 발생하지만 게임이없는 경우는 대부분 게임이 승리합니다. 손실없이.문자열의 특정 동일 문자의 연속 된 카운트 - PHP

다음과 같은 문자열이 있습니다. 그때 것이다 (W charector의

  • 가장 긴 연속 실행 (난 후 L에 대한 복제합니다)
  • 가장 긴 연속 실행 W charector없이 'WWWDDWWWLLWLLLL'이 들어

    나는 반환 할 수 있어야합니다 L을 위해 복제하십시오)

나는 배열을 통해 갈 것이고 가장 긴 순서를 말할 것이지만 위의 기준을 충족시키지 못한다.

모든 도움과이 크게 감사합니다 학습 :

function getLongestSequence($sequence){ 
$sl = strlen($sequence); 
$longest = 0; 
for($i = 0; $i < $sl;) 
{ 
$substr = substr($sequence, $i); 
$len = strspn($substr, $substr{0});if($len > $longest) 
$longest = $len; 
$i += $len; 
} 
return $longest; 
} 
echo getLongestSequence($sequence); 
+0

가능한 중복 [문자열에 같은 문자로 긴 시퀀스의 길이를 얻는 방법?] (http://stackoverflow.com/questions/2803803/how-to-get-length-of-the -longest-sequence-with-a-string) –

+0

정규 표현식을 사용해보십시오. 구체적으로 말하면,'W +'와'[^ W] +'를 찾고 있습니다. – georg

+0

답장을 보내 주셔서 감사합니다. @ValentinRodygin, 나는 이것을 보았지만 특정 charector를 참조하는 방법을 볼 수 없거나 특정 charector를 제외한 모든 문자열을 찾지 못합니다. georg 아마도 reg ex는 그것에 통합 될 수 있습니까? – user3061608

답변

2

당신은 동일한 문자의 시퀀스를 감지하는 정규 표현식을 사용할 수 있습니다 : 당신은 연속 된 문자의 최대 수를 달성 할 수

$string = 'WWWDDWWWLLWLLLL'; 
// The regex matches any character -> . in a capture group() 
// plus as much identical characters as possible following it -> \1+ 
$pattern = '/(.)\1+/'; 

preg_match_all($pattern, $string, $m); 
// sort by their length 
usort($m[0], function($a, $b) { 
    return (strlen($a) < strlen($b)) ? 1 : -1; 
}); 

echo "Longest sequence: " . $m[0][0] . PHP_EOL; 
+0

고마워요 - 작동하지만, 제가 구현하려고하는 사이트가 현재 PHP 5.2에서 실패했음을 언급하지 않았습니다. – user3061608

+0

아, 알겠습니다. PHP5.2는 익명 함수를 지원하지 않습니다 (위의 예제에서'usort'에 의해 사용됨). 나는 그 서버에서 PHP를 업데이트 할 것을 제안합니다. 그러나, 여기에 PHP의 모든 버전에서 작동하는 예제가 제공됩니다 : http://3v4l.org/Ckdl6 – hek2mgl

+0

당신의 도움을 주셔서 감사합니다, 지금은 또 다른 경고를 던져 얻을 : 경고 : usort() [function.usort] : 잘못된 비교 함수 WWW – user3061608

0

을 아래 코드를 사용하여 특정 문자열.

 $string = "WWWDDWWWLLWLLLL"; 
     function getLongestSequence($str,$c) { 
     $len = strlen($str); 
     $maximum=0; 
     $count=0; 
     for($i=0;$i<$len;$i++){ 
      if(substr($str,$i,1)==$c){ 
       $count++; 
       if($count>$maximum) $maximum=$count; 
      }else $count=0; 
     } 
     return $maximum; 
     } 
     $match="W";//change to L for lost count D for draw count 
     echo getLongestSequence($string,$match);