PHP循环统计连续相同的字符,php 算出连续重复的子字符串

上次突然想到了一道算法题,题目如下:一个字符串,算出重复且长度最长的子字符串。下面是我写的算法,基本思想是先求出重复的字符串,组成一个数组,在求出该数组每个元素的长度组成一个新的数组,在拆分新的数组,以长度为元素又组成一个新的数组,算出最大值,根据有长度的那个数组每个元素是否有最大值算出该子字符串。

header ( "content-type:text/html;charset=utf-8" );

/**

* 给一个字符串计算出长度最长的子字符串

*

* @author lxy

*

*/

class maxstr {

private function __construct() {

}

/**

* 筛选出有连续重复的子字符串

*

* @param String $str

* @return Array

*/

private static function strtoarr($str) {

$nwearray = array ();

$oldarray=array();

$newstr = "";

for($i = 0; $i < strlen ( $str ) - 1; $i ++) {

$newstr = "";

for($j = $i + 1; $j < strlen ( $str ); $j ++) {

if ($str [$i] == $str [$j]) {

$newstr .= $str [$j];

} else {

break;

}

}

if (strlen ( $newstr ) > 0) {

$newstr .= $str [$i];

$e = strlen ( $newstr );

$i = $i + $e - 1;

$oldarray [] = $newstr;

}

}

return $oldarray;

}

/**

* 筛选出长度最长的子字符串

*

* @param String $str

* @return Array

*/

private static function maxlenth($str) {

$oldarray = self::strtoarr ( $str);

if(empty($oldarray)){

echo "对不起您没有重复的子字符串";

return false;

}

$lastarray = array ();

$newlenarray = array ();

foreach ( $oldarray as $val ) {

$newarray [] = $val . [email protected] . strlen ( $val );

}

foreach ( $newarray as $value ) {

$numarr = explode ( [email protected], $value );

$numar [] = $numarr [1];

}

$maxlength = max ( $numar );

foreach ( $newarray as $valu ) {

$varray = explode ( [email protected], $valu );

if (array_search ( $maxlength, $varray )) {

$lastarray [] = $varray [0];

}

}

return $lastarray;

}

/**

* 入口文件

*

* @param String $str

* @return Array

*/

public static function main($str) {

$newstr = self::maxlenth ( $str );

return $newstr;

}

}

$str = "aaaeeeeebbbbcd";

$newstr = maxstr::main ( $str );

print_r ( $newstr );

原文:http://blog.csdn.net/xingjigongsi/article/details/23934701

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值