为了账号安全,请及时绑定邮箱和手机立即绑定

php如何匹配字符串中重复的子字符串

php如何匹配字符串中重复的子字符串

PHP
拉风的咖菲猫 2019-03-04 19:33:11
比如有如下的字符串: $str = "cpucpucpucpucpucpucpucpucpcupcpu"; $str1="lovelovelovelovelovelovelovelovelovehellohellohellohellohahaha"; 想要得到的结果是: $str中出现次数最多的子字符串是 cpu。 $str1中出现次数最多的字符串是 love和hello。 大家帮忙给指导指导。
查看完整描述

4 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

$len = strlen($str);
$flag['num'] = 0;
$flag['str'] = '';
$flag['len'] = 0;
for($i = 0; $i < $len-1; $i++){
    for ($j = 2; $j < $len - 1 - $i; $j++) {
        $tar = substr($str, $i, $j);
        $count = substr_count($str, $tar);
        if($count >= $flag['num']){
            $flag['num'] = $count;
            $flag['str'] = $tar;
        }
    }
}
var_dump($flag);

$str 中重复最多的显然是 cp

查看完整回答
反对 回复 2019-03-18
?
www说

TA贡献1775条经验 获得超8个赞

查看完整回答
反对 回复 2019-03-18
?
函数式编程

TA贡献1807条经验 获得超9个赞

个人觉得,如果仅仅是给出一个连续的字符串,也没有明确说明统计什么单词出现的次数,这种情况下:

  1. 首先得有一个中英文字词大全
  2. 一个个进行组合,比如第一个字符和第二个字符进行组合,在字词大全中查找是否有这么个字或词!如果有,统计他出现的次数,第一个和第三个进行组合...直到第一个和第 n 个 .....,这是两个字符进行组合,接下去是三个字符进行组合 ... 等第。等第一个字符所有可能性组合完成,第二个字符以此类推。
  3. 最后对统计得出的结果进行排序,返回出现次数最高的字或词

个人觉得单第一个条件就难以满足....,所以,这种想法不太可能实现!

如果你给出一个有明确分隔符字符串,比如有空格的,那还好。或者说给出一个任意字符串(连续都无所谓),但是你很明确知道要统计其中什么字、词的数量,比较得出频率最高的结果,那都很好实现 ....

查看完整回答
反对 回复 2019-03-18
?
湖上湖

TA贡献2003条经验 获得超2个赞

有个疑问,出现最多的字符串是已经给定的几个来判别,还是说该字符串中所有子串,然后取查其最多的?

  1. 如果是给定的一组字符串(字典),只需要使用substr_count()来统计
  2. 如果是所有子串的情况,就需要计算出该字符串的所有子串(非空),如cpucpucpucpucpucpucpucpucpcupcpu 中的cpu也属于最多的
查看完整回答
反对 回复 2019-03-18
  • 4 回答
  • 0 关注
  • 846 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信