在一大堆长字符串中,查找出现频率最高的连续的五个字符,例:我是中国人我是外国人我是韩国人我是美国人我是中国人我是英国人我是中国人我是外国人
  就返回我是中国人,因为我是中国人出现的频率最高,这怎么做啊??我刚刚接触php,啥都不会,求帮助,字符串里可能有特殊字符啥的,连续的字符数暂时是五个,也可能是三个,四个的,
 求帮助,多给几个方法

这次是根据不同 的字符串长度,选择效率高的那一种方法,
就是判断一下字符串的长度,然后调用最适合的方法。

解决方案 »

  1.   

    看你问了又问,比我以前还执着,我以前也问过类似问题,唠叨老大也参与过回答
    5年前做这个已经做到头痛,代码现在不想写了1.拆字->数组1
    2.求数组1不重复的值,就是字串中有多少个不同的字->数组2
    3.每个字出现的次数
    4.按次数排序
    5.按次数多->少组合数组2的字(个数就是你定义的)(注意:这里是排列组合的问题,不光是组合
    6.检查这个组合在字串中出现的次数
    ……
    最后,这个东西不好玩,写出来后马上有扔掉的念头
      

  2.   


    我前天晚上才装上php,啥都不会啊
      

  3.   

    刚学php别搞那么复杂的问题,这个问题看似简单,但至少要熟悉三种以上不同的字符串解决方法才能做好先去学字符串函数、数组函数、正则、编码转换,和一些简单统计学的知识才做这个
      

  4.   


    $str = '我是中国人我是外国人我是韩国人我是美国人我是中国人我是英国人我是中国人我是外国人';print_r(my_str_count($str, 5, 'UTF-8'));
    function my_str_count($str = '', $len = 0, $charset = 'UTF-8')
    {
    $arr = $res = array();
    $max = 0;
    if($len <= 0)
    {
    return false;
    }
    for($i=0,$n=mb_strlen($str, $charset)-$len;$i<=$n;$i++)
    {
    $tmp = mb_substr($str, $i, $len, $charset);
    $arr[$tmp] = !isset($arr[$tmp]) ? 1 : ($arr[$tmp] + 1);
    if($arr[$tmp] > $max)
    {
    $max = $arr[$tmp];
    }
    }
    foreach($arr AS $k => $v)
    {
    if($v == $max)
    {
    $res[$max][] = $k;
    }
    }
    return $res;
    }
    O(n)的复杂度,返回是个数组,下标是字符串出现次数,元素是,出现key次的不同字符串Array
    (
        [3] => Array
            (
                [0] => 我是中国人
                [1] => 是中国人我
                [2] => 中国人我是
            )
     
    )
      

  5.   


    为什么我这里的效果是这样的啊Array ( [3] => Array ( [0] => 是中国人我是 ) ) 
      

  6.   


    我想不明白啊,
    接触编程还没有多长时间,
    php更是昨天才开始接触……
      

  7.   

    我前面给的例子,,默认编码是UTF-8,你要是GBK编码,当然有所不同既然你是学习,就贴你自己写的代码出来如果只想看别人怎么写,,建议你下载个有名些的开源php,比来这里好得多……