如何找到字符串中所选字符的最长连续序列的长度?
我想要做的是看看0是否在这样的字符串中出现5次或更多次
" 111010110101010000010010100000000000111"
我需要的功能是一个字符串和一个字符,在上面的例子中,为字符0返回11
非常感谢,大师们:)
答案 0 :(得分:1)
我想应该有一种更有效的方法来实现这一点,也许是使用正则表达式,但是,仍然是这里我带来的
function howmanytimes($str,$char){
$maxcount=0;
$thiscount=0;
for($i=0;$i<strlen($str);$i++){
if(substr($str,$i,1)==$char){
$thiscount++;
if($thiscount>$maxcount) $maxcount=$thiscount;
}else $thiscount=0;
}
return $maxcount;
}
希望有所帮助!
编辑:如果您只想检查char是否连续出现超过X次,那么有一种更有效的方法可以实现。如果所选的char出现的次数超过X次,则此函数将返回true,否则返回false。
function Xtimes($str,$char,$howmanytimes){
$maxcount=0;
$thiscount=0;
for($i=0;$i<strlen($str);$i++){
if(substr($str,$i,1)==$char){
$thiscount++;
if($thiscount>$maxcount){
if($thiscount==$howmanytimes+1){return true;}
$maxcount=$thiscount;
}
}else $thiscount=0;
}
return false;
}
答案 1 :(得分:1)
您可以使用regex
:
function highCount($string, $select) {
preg_match_all("/($select+)\1*/", $string, $find);
foreach($find[0] as $single) {
$length[] = strlen($single);
}
return max($length);
}
//11
echo highCount("111010110101010000010010100000000000111", 0);
答案 2 :(得分:0)
你可以试试这个:
function myFunc($input_string,$find)
{
$string=preg_replace("^$find","-",$input_tring);
$array=explode("-",$string);
$array=array_diff($array, array(""));
asort($array);
return strlen($array[0]);
}
我认为-
字符未出现在您的查找条件中。