strstr函数用的不好,她的返回值是"0"的时候按false算...
把if改一下就行了:
if (!$h[$child[$i]] && strstr($parent, $child[$i])!=null) 

解决方案 »

  1.   

    也可以这样写:if (!($h[$child[$i]]) && strpos($parent, $child[$i])!== false)
      

  2.   

    <?
    $str1 = "003";
    $str2 = "085"; 
    $str3 = "851";
    function renum($arrr,$arrr1)
    {
    return array_unique(array_intersect($arrr,$arrr1));
    }
    $arr=str_split($str1,1);
    $arr1=str_split($str2,1);
    $arr2=str_split($str3,1);
    echo count(renum($arr,$arr1))."<br>";
    echo count(renum($arr2,$arr1));
    ?>我这个代码难道比他那个差???不用循环的
      

  3.   

    你是一行循环都没有,可你的时间复杂度呢?
    就像有些人用了Arrays.sort就说自己的程序是O(n)一样.事先声明我可不认识LZ,他为何这么问我也不知道.
      

  4.   

    <?
    $stime=microtime(true); 
    $str1 = "003";
    $str2 = "085"; 
    $str3 = "851";
    function renum($arrr,$arrr1)
    {
    return array_unique(array_intersect($arrr,$arrr1));
    }
    $arr=str_split($str1,1);
    $arr1=str_split($str2,1);
    $arr2=str_split($str3,1);
    echo count(renum($arr,$arr1))."<br>";
    echo count(renum($arr2,$arr1));
    $etime=microtime(true);//获取程序执行结束的时间
    $total=$etime-$stime;   //计算差值
    echo "<br />{$total} times";
    ?>
    我的这个执行时间:0.000140190124512 <?php
    $stime=microtime(true);
     function get_genetic_num($parent, $child)
     {
       $count = 0;
       for ($i=0; $i< strlen($child); $i++)
       {
         if (strstr($parent, $child[$i]))
           $count++;
       }
       return $count;
     }
     $str1 = "003";
     $str2 = "085";
     echo get_genetic_num($str1, $str2)."\n";
     $str3 = "851";
     echo get_genetic_num($str2, $str3)."\n";
    $etime=microtime(true);//获取程序执行结束的时间
    $total=$etime-$stime;   //计算差值
    echo "<br />{$total} times";
    ?>
    你的这个执行时间:0.000356912612915 
      

  5.   

    LZ可能只是想理解strstr的作用呢,你非跑来说一大堆文不对题.
    时间复杂度O是算法最基础的问题,别以为自己会几个函数就粘粘自喜,
    你的程序时间复杂度是O(n^3),n越大就越慢.你知道人体多少遗传基因?
    你知道为什么ruby1.9.1的运算比1.8.7快但是为什么显示反而慢吗?
      

  6.   

    声明LZ要的判断继承了多少个字符串
    而不是要了解strstr的作用对你无语!连LZ要干什么都不知道
      

  7.   

    我再声明一点
    你那个函数本身也达不到LZ的要求
    自己看LZ说你的运算结果
      

  8.   

    各人认为
    chinmo 
    比较好!!!
    支持chinmo 
      

  9.   

    改进算法:
    <?php
    $stime=microtime(true); 
    $str1 = "003";
    $str2 = "085"; 
    $str3 = "851";
    function get_genetic_num($parent,$child)
    {
      $h = Array();
      for ($i=0;$i<strlen($parent);$i++)
        $h[$parent[$i]] = 1;
      $count = 0;
      for ($i=0;$i<strlen($child);$i++)
        if ($h[$child[$i]]==1)
        {
          $count++;
          $h[$child[$i]] = 2;
        }
      return $count;
    }
    echo get_genetic_num($str1,$str2)."\n";
    echo get_genetic_num($str2,$str3);
    $etime=microtime(true);
    $total=$etime-$stime;
    echo "\n{$total} times\n";
    ?>什么老板老板的,我自己就是老板.
    chinmo我这就准备n长的数据,你别走.
      

  10.   

    呵呵。。首先谢谢大家的支持,我马上对两个人的程序进行测试达到我的要求就行。关于chinmo 的程序,我还没有测试,不过我对chinmo 的程序有点看不太明白。待我研究一下。谢谢了。
      

  11.   

    你还真不是一般的无知,优化没优化比较一下就知道了,
    你没看到strstr消失了吗.
      

  12.   

    下面的数据,你的程序运行时间0.0052988529205322,
    我的是0.0025999546051025,你说谁的快?<?
    $stime=microtime(true); 
    $str1 = "US^^`hl`FmKQBYTfreoeELNbluXVOq\epUOuMZQNuInbbMS^qLMuXZbNZEdhuKXp_fpkJKDISqktHI\DTiDlNeEhjhZjsrd\b^RlhUuFQjDXs`[QT_HaNLSCtmlqiZXVBiLjILoYAsqs]WOquV\NaoP`fF\Z`spbgGWoRPRRNMOkd]fcrLp^FKIlPdPpbK\SQrLcM^uZkNOYktFhKAQPKYF[HVUiapFrmR_Do^^dllGakMSuMdPXGVrOkQBWLHSCYrGRZdAQZHrPTPOas_DEtuSjPTK\\]^tYdQsSQOlXKFlZUXWs[[rZmfjLqPgXnfq]AooQHfiRk`kKBLI]gEB^kljfF\ItLD[MsU]EEQWpqLErXMZIR[gHQ\mWBuUNDpZAOAFSR\MMhRJK_dTqIFCZaoqcoQprLTsZUDmf`EsSVH]ukqptArXblTOfdIco\`TpdKaNP_affHe[D`YE]pfSOuCrHfkdPJ_tTKMdimTYuDsCcVGJQm]_l`\tPRb`[L_oVk]Ibpaat^datkkPbSoYrUWMfDmKOVEdKalm\XYZAGEurpO_MHBJ]YVM\MXjb\YlHPdcgGHhMMgJGuhSHi\dMrqhIT]koAbBPPeBVlicCZlIZ^\aRCO^tKQH^nrXn_YInHJOsrquWhIpPd[bfjJet[l]SitLRWTJ_]Y\ZT\qFdkVRQBCFLgEg]aDP_Obucl_KOEdc``iOUIafKckWUoHqZLLCZmCHcaRrfA_Q`R_u[JeemZFLTNHmYSpsKsEn^VjOWT_AeIAKSeoJJuU]M]TfoOcELgrjHgC_Fb_jj`uGOnQXnfuFMTlGbYKmKHaSodqtP[iEEhKTa\kYLk_XIU^jnhbCpNVirQgLkZQpM[NmBDQMnodBOMlHuXJof_bbpTnfnI`EdnqeqLqjF`kUla\kDfeiPRVJeNo^VZbER^iNieBoOmOFXkq\[aOjrdtbrmJSRkWcSJqGorAHjONLDJg_jASfeRS";
    $str2 = "QIqCFiV^UbC^^FcR\KdUDNkGGSmNLLlEJDfUJHG^jJFROhdksSJB`tHfRtt]JkbSnRgBZn`NBf_QYNFV`OWKN_p`]oHgdjE\Gk^`dImfnWAQdGgNVIXdgSOOLVupJEWPoup^HgNAHOQlVCDkK\ZrohKEHKtROVbIU\g\Mt\UNmKcpOYEksBdeMimWhJfHko\Q`C^__rmWH[QWsVLpWp`ccXEUak\VdCgOEOncLfDTKUjHjACKqcm^ErsegZFV\leaF]ORNSeXgZ_[[beVP]tTYqDJUJ`quO\FljWDGG[m`ESFgB[A_ZTCUXMialeaEKfpuHtFNYsn^PsORYOqrcsREJEeujPEtAusHsDVWBNtQLMce\^aI\rMeBrekMijMhhUfljHmCFIOSksoT_Bo\O_^KNTWBHdjpCZfmb^pgfJE\GsofuiLNSjX`HobP^VJ`ppX\XSNI\RdbP^SOQ_\cStNZmoiVOsuJmXePjrXPOFr^cOltnRbKPpdHiX]CU]MMuq\intCGEudhO[fGlSQGMuOAWlDlTPDSL`FD^IKbHnTWSE]JWnQdm_eOVhFiBIFNhLQQT[r\TQsgVZqmRL[JkJYKr^ttgDLYP\jdBgJVBHHXaCOsOiHDs`OoIMmpQDS``HNbnXBo_IQKL`IZTP^QplKDDCsTFQtfXMRPeSJN\[YhEaMXqjikatoeAlDGGBl_OIns[BLB\dj`PACKkkAWioFjfJqlLhUZpNWVOcXkRLVaLXlBNlXBf^kVggMrYbVTomiIZKslWTWbkMcDDFEjcoJU`WQDCgWq_KEDVBolUQYK^FNaLRVnL_MlA^pCPQtn\CrqElgZGJddPrP[OeTZOaQOIKQY\PRBRNrWDdpJm^nG[HbiluNE`^SiidLOs^QPkMfop`DhIqocC[Vo[dsELQnutENqb^KXkpQf[TXcOQPRlfKQUHV`XN`WRnStW]VLXfrrET`Sepe[aokuBK`Z"; 
    $str3 = "ogI^VSJqCHr^B^Ooe\XHBUAi]^IohErpAP\GloFsKb\MKjGoP^BRrBEZ`NSRRPLR_gXV`]TkJoBTcHNseOPbPTFpbYLshXORJggjOE_Xs`kagD^WRnDbMI\nbgkTJEeSkWGE[e\YPRDBUbXfZ[Rgdm_Q_TdiYTFOjMSPrnhLKlN_XePrKbcoYMJCanlDLrRAIePF]CRgn_QQO`NYLqSeH]hhU_l`[IadmqiTsEFlcWGrBUUNPhsXOeKcOANiInWujJTgOZ]rpdnrDNJSuGkOluqEuJnICOIlY]]gAEdqi]nljBJjItCtssDsHqGJKOucl]UlaChU_`KTbTHjSJiQHmNOhUXrdX`ZttQ`BDtadJtP^FEpPmKWdYfWmIS\`su_qQIrTG]BQ\RnbVhqMsSqVDRNLeilbiU^D]ZXdBZt^klJL_FX\XTq\eJgUr]Afq^jYCLGEfFb[qkf[qIAS]roLF`aCHahCJ\[MgbQXgsrcicHdlHBSEp_JZJLbktduZJLLl\c]Z`JMNRpDZqW^lAhQKtruratVkKaagNIKnSWFdRJHNaeDaXUkVQkRrjgguSRfa[pYmR^[dhbqSRusiTiIe_[aTLRS_dCJIscuPK[ssGoPYoNMNBVr`p^sGoPe^SngP[g`fL^cSWskQKB^LX[lRCjXrDGZWuLf[rQKHnnZPkO`AQIMhcCEel\bpcFQbQBGNRRUKKnZAHDAYLMKoPP_FkKAYQQEbSLoe^NoiGSiNWifcAq\QKFWAPWYah^MFjGjSTcF[AnhXbYEcUas`fT`AkDa]bmbWsWiREnlEg_]TCaAWMtArSarHe^eQVQgSh[elT\pEFWXHCY^OW_LiJIpnf_JFpqYbWIXjdSnjjQqmiYGKBRsL[nELXNRSJju`sWTbjMV_^QWQj][loYBTQF_iTpF]eEHc\\OQhepPuQajmG`f_aDpgcdE]ibMnjoUPIeCm_SlosagEKWdl[^]HMbeuNrnBkMRt";
    function renum($arrr,$arrr1)
    {
      return array_unique(array_intersect($arrr,$arrr1));
    }
    $arr=str_split($str1,1);
    $arr1=str_split($str2,1);
    $arr2=str_split($str3,1);
    echo count(renum($arr,$arr1))."<br>";
    echo count(renum($arr2,$arr1));
    $etime=microtime(true);//获取程序执行结束的时间
    $total=$etime-$stime;   //计算差值
    echo "\n{$total} times\n";
    ?><?
    $stime=microtime(true); 
    $str1 = "US^^`hl`FmKQBYTfreoeELNbluXVOq\epUOuMZQNuInbbMS^qLMuXZbNZEdhuKXp_fpkJKDISqktHI\DTiDlNeEhjhZjsrd\b^RlhUuFQjDXs`[QT_HaNLSCtmlqiZXVBiLjILoYAsqs]WOquV\NaoP`fF\Z`spbgGWoRPRRNMOkd]fcrLp^FKIlPdPpbK\SQrLcM^uZkNOYktFhKAQPKYF[HVUiapFrmR_Do^^dllGakMSuMdPXGVrOkQBWLHSCYrGRZdAQZHrPTPOas_DEtuSjPTK\\]^tYdQsSQOlXKFlZUXWs[[rZmfjLqPgXnfq]AooQHfiRk`kKBLI]gEB^kljfF\ItLD[MsU]EEQWpqLErXMZIR[gHQ\mWBuUNDpZAOAFSR\MMhRJK_dTqIFCZaoqcoQprLTsZUDmf`EsSVH]ukqptArXblTOfdIco\`TpdKaNP_affHe[D`YE]pfSOuCrHfkdPJ_tTKMdimTYuDsCcVGJQm]_l`\tPRb`[L_oVk]Ibpaat^datkkPbSoYrUWMfDmKOVEdKalm\XYZAGEurpO_MHBJ]YVM\MXjb\YlHPdcgGHhMMgJGuhSHi\dMrqhIT]koAbBPPeBVlicCZlIZ^\aRCO^tKQH^nrXn_YInHJOsrquWhIpPd[bfjJet[l]SitLRWTJ_]Y\ZT\qFdkVRQBCFLgEg]aDP_Obucl_KOEdc``iOUIafKckWUoHqZLLCZmCHcaRrfA_Q`R_u[JeemZFLTNHmYSpsKsEn^VjOWT_AeIAKSeoJJuU]M]TfoOcELgrjHgC_Fb_jj`uGOnQXnfuFMTlGbYKmKHaSodqtP[iEEhKTa\kYLk_XIU^jnhbCpNVirQgLkZQpM[NmBDQMnodBOMlHuXJof_bbpTnfnI`EdnqeqLqjF`kUla\kDfeiPRVJeNo^VZbER^iNieBoOmOFXkq\[aOjrdtbrmJSRkWcSJqGorAHjONLDJg_jASfeRS";
    $str2 = "QIqCFiV^UbC^^FcR\KdUDNkGGSmNLLlEJDfUJHG^jJFROhdksSJB`tHfRtt]JkbSnRgBZn`NBf_QYNFV`OWKN_p`]oHgdjE\Gk^`dImfnWAQdGgNVIXdgSOOLVupJEWPoup^HgNAHOQlVCDkK\ZrohKEHKtROVbIU\g\Mt\UNmKcpOYEksBdeMimWhJfHko\Q`C^__rmWH[QWsVLpWp`ccXEUak\VdCgOEOncLfDTKUjHjACKqcm^ErsegZFV\leaF]ORNSeXgZ_[[beVP]tTYqDJUJ`quO\FljWDGG[m`ESFgB[A_ZTCUXMialeaEKfpuHtFNYsn^PsORYOqrcsREJEeujPEtAusHsDVWBNtQLMce\^aI\rMeBrekMijMhhUfljHmCFIOSksoT_Bo\O_^KNTWBHdjpCZfmb^pgfJE\GsofuiLNSjX`HobP^VJ`ppX\XSNI\RdbP^SOQ_\cStNZmoiVOsuJmXePjrXPOFr^cOltnRbKPpdHiX]CU]MMuq\intCGEudhO[fGlSQGMuOAWlDlTPDSL`FD^IKbHnTWSE]JWnQdm_eOVhFiBIFNhLQQT[r\TQsgVZqmRL[JkJYKr^ttgDLYP\jdBgJVBHHXaCOsOiHDs`OoIMmpQDS``HNbnXBo_IQKL`IZTP^QplKDDCsTFQtfXMRPeSJN\[YhEaMXqjikatoeAlDGGBl_OIns[BLB\dj`PACKkkAWioFjfJqlLhUZpNWVOcXkRLVaLXlBNlXBf^kVggMrYbVTomiIZKslWTWbkMcDDFEjcoJU`WQDCgWq_KEDVBolUQYK^FNaLRVnL_MlA^pCPQtn\CrqElgZGJddPrP[OeTZOaQOIKQY\PRBRNrWDdpJm^nG[HbiluNE`^SiidLOs^QPkMfop`DhIqocC[Vo[dsELQnutENqb^KXkpQf[TXcOQPRlfKQUHV`XN`WRnStW]VLXfrrET`Sepe[aokuBK`Z"; 
    $str3 = "ogI^VSJqCHr^B^Ooe\XHBUAi]^IohErpAP\GloFsKb\MKjGoP^BRrBEZ`NSRRPLR_gXV`]TkJoBTcHNseOPbPTFpbYLshXORJggjOE_Xs`kagD^WRnDbMI\nbgkTJEeSkWGE[e\YPRDBUbXfZ[Rgdm_Q_TdiYTFOjMSPrnhLKlN_XePrKbcoYMJCanlDLrRAIePF]CRgn_QQO`NYLqSeH]hhU_l`[IadmqiTsEFlcWGrBUUNPhsXOeKcOANiInWujJTgOZ]rpdnrDNJSuGkOluqEuJnICOIlY]]gAEdqi]nljBJjItCtssDsHqGJKOucl]UlaChU_`KTbTHjSJiQHmNOhUXrdX`ZttQ`BDtadJtP^FEpPmKWdYfWmIS\`su_qQIrTG]BQ\RnbVhqMsSqVDRNLeilbiU^D]ZXdBZt^klJL_FX\XTq\eJgUr]Afq^jYCLGEfFb[qkf[qIAS]roLF`aCHahCJ\[MgbQXgsrcicHdlHBSEp_JZJLbktduZJLLl\c]Z`JMNRpDZqW^lAhQKtruratVkKaagNIKnSWFdRJHNaeDaXUkVQkRrjgguSRfa[pYmR^[dhbqSRusiTiIe_[aTLRS_dCJIscuPK[ssGoPYoNMNBVr`p^sGoPe^SngP[g`fL^cSWskQKB^LX[lRCjXrDGZWuLf[rQKHnnZPkO`AQIMhcCEel\bpcFQbQBGNRRUKKnZAHDAYLMKoPP_FkKAYQQEbSLoe^NoiGSiNWifcAq\QKFWAPWYah^MFjGjSTcF[AnhXbYEcUas`fT`AkDa]bmbWsWiREnlEg_]TCaAWMtArSarHe^eQVQgSh[elT\pEFWXHCY^OW_LiJIpnf_JFpqYbWIXjdSnjjQqmiYGKBRsL[nELXNRSJju`sWTbjMV_^QWQj][loYBTQF_iTpF]eEHc\\OQhepPuQajmG`f_aDpgcdE]ibMnjoUPIeCm_SlosagEKWdl[^]HMbeuNrnBkMRt";
    function get_genetic_num($parent,$child)
    {
      $h = Array();
      for ($i=0;$i<strlen($parent);$i++)
        $h[$parent[$i]] = 1;
      $count = 0;
      for ($i=0;$i<strlen($child);$i++)
        if ($h[$child[$i]]==1)
        {
          $count++;
          $h[$child[$i]] = 2;
        }
      return $count;
    }
    echo get_genetic_num($str1,$str2)."\n";
    echo get_genetic_num($str2,$str3);
    $etime=microtime(true);
    $total=$etime-$stime;
    echo "\n{$total} times\n";
    ?>
      

  13.   

    那是我没注意你既然说你优化了
    那你就比较一下脚本执行时间吧<?php
    $stime=microtime(true); 
    $str1 = "120";
    $str2 = "085"; 
    $str3 = "851";
    function get_genetic_num($parent,$child)
    {
      $h = Array();
      for ($i=0;$i<strlen($parent);$i++)
        $h[$parent[$i]] = 1;
      $count = 0;
      for ($i=0;$i<strlen($child);$i++)
        if ($h[$child[$i]]==1)
        {
          $count++;
          $h[$child[$i]] = 2;
        }
      return $count;
    }
    echo get_genetic_num($str1,$str2)."\n";
    echo get_genetic_num($str2,$str3);
    $etime=microtime(true);
    $total=$etime-$stime;
    echo "\n{$total} times\n"."<br>";$stime=microtime(true); 
    $str1 = "003";
    $str2 = "085"; 
    $str3 = "851";
    function renum($arrr,$arrr1)
    {
    return array_unique(array_intersect($arrr,$arrr1));
    }
    $arr=str_split($str1,1);
    $arr1=str_split($str2,1);
    $arr2=str_split($str3,1);
    echo count(renum($arr,$arr1))."\n";
    echo count(renum($arr2,$arr1));
    $etime=microtime(true);//获取程序执行结束的时间
    $total=$etime-$stime;   //计算差值
    echo "\n{$total} times\n";
    ?>结果:
    1 2 0.000363111495972 times 
    1 2 0.000243902206421 times
      

  14.   

    本来一个O比较就完事了,非要拿具体数据出来,
    跟PHP业余爱好者说话还就是费尽.
      

  15.   

    chinmo,在33L数据面前你还有什么好说的?把你的优化算法拿出来呀.
      

  16.   

    本来没打算吵,chinmo又说我们刷分又贬低我的程序,人不烦我我不烦人.
      

  17.   

    两位老大,能不能留个QQ啊。。我的QQ:79709387希望交个朋友。