鍍金池/ 問(wèn)答/Java  PHP  Python  Linux  數(shù)據(jù)庫(kù)/ php如何匹配字符串中重復(fù)的子字符串

php如何匹配字符串中重復(fù)的子字符串

比如有如下的字符串:

$str = "cpucpucpucpucpucpucpucpucpcupcpu";  
$str1="lovelovelovelovelovelovelovelovelovehellohellohellohellohahaha";  

想要得到的結(jié)果是:

$str中出現(xiàn)次數(shù)最多的子字符串是 cpu。 $str1中出現(xiàn)次數(shù)最多的字符串是 love和hello。 

大家?guī)兔o指導(dǎo)指導(dǎo)。




  
回答
編輯回答
脾氣硬
2017年2月14日 01:55
編輯回答
夕顏

個(gè)人覺(jué)得,如果僅僅是給出一個(gè)連續(xù)的字符串,也沒(méi)有明確說(shuō)明統(tǒng)計(jì)什么單詞出現(xiàn)的次數(shù),這種情況下:

  1. 首先得有一個(gè)中英文字詞大全
  2. 一個(gè)個(gè)進(jìn)行組合,比如第一個(gè)字符和第二個(gè)字符進(jìn)行組合,在字詞大全中查找是否有這么個(gè)字或詞!如果有,統(tǒng)計(jì)他出現(xiàn)的次數(shù),第一個(gè)和第三個(gè)進(jìn)行組合...直到第一個(gè)和第 n 個(gè) .....,這是兩個(gè)字符進(jìn)行組合,接下去是三個(gè)字符進(jìn)行組合 ... 等第。等第一個(gè)字符所有可能性組合完成,第二個(gè)字符以此類(lèi)推。
  3. 最后對(duì)統(tǒng)計(jì)得出的結(jié)果進(jìn)行排序,返回出現(xiàn)次數(shù)最高的字或詞

個(gè)人覺(jué)得單第一個(gè)條件就難以滿(mǎn)足....,所以,這種想法不太可能實(shí)現(xiàn)!

如果你給出一個(gè)有明確分隔符字符串,比如有空格的,那還好?;蛘哒f(shuō)給出一個(gè)任意字符串(連續(xù)都無(wú)所謂),但是你很明確知道要統(tǒng)計(jì)其中什么字、詞的數(shù)量,比較得出頻率最高的結(jié)果,那都很好實(shí)現(xiàn) ....

2017年7月19日 06:00
編輯回答
冷咖啡

有個(gè)疑問(wèn),出現(xiàn)最多的字符串是已經(jīng)給定的幾個(gè)來(lái)判別,還是說(shuō)該字符串中所有子串,然后取查其最多的?

  1. 如果是給定的一組字符串(字典),只需要使用substr_count()來(lái)統(tǒng)計(jì)
  2. 如果是所有子串的情況,就需要計(jì)算出該字符串的所有子串(非空),如cpucpucpucpucpucpucpucpucpcupcpu 中的cpu也屬于最多的
2018年3月4日 10:42
編輯回答
初心
$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 中重復(fù)最多的顯然是 cp

2018年3月4日 20:30