首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

关于similar_text的点子

2012-09-11 
关于similar_text的想法今天在群里就similar_text起了分歧,百度良久无果,最后还是自己写的代码猜测的结果,

关于similar_text的想法
今天在群里就similar_text起了分歧,百度良久无果,最后还是自己写的代码猜测的结果,但是不知道正确与否,所以发出来希望大家指导一下
比如:similar_text("Hello World","Hello Peter");
w3cschool给出的结果是7,但是开始认为应该是6因为匹配的相同位置只能是6
但是后来猜测不按位置就是7了。
然后就不按位置比较应该怎么比,又研究起来
最后得到一个还是不太统一但相对过的去的就是:
每个字符依次的比较,比较后就跳到下一个字符,不过第二个字符串应该是找到后的下一个位置。
比如 similar_text("021312","301221");
1.匹配第1个字符串的第0个字符0在第2个的第1个位置匹配到了
2.匹配第1个字符串的第1个字符2,但是要在第1次的匹配的位置也就是0的后面开始匹配在第二个字符串的第3个位置
2.匹配第1个字符串的第2个字符1,但是要在第2次的匹配的位置也就是第3个字符2的后面开始匹配在第二个字符串的第5个位置
这时第二个字符串已经匹配完了所以结束,最后得出的结果是3
不知道,这样分析对不对,请大神们不吝赐教

[解决办法]
看一下源码不就知道了?
如果不想找的话,这里就有 http://topic.csdn.net/u/20120811/20/B0FE6AE4-4970-458E-8CE3-2D4793438D2E.html
[解决办法]
相当于这样一个过程

PHP code
$a = "Hello World";$b = "Hello Peter";echo similar_text($a, $b), '<br />';$i = 0;$j = 0;while($i<strlen($a) && $j<strlen($b)) {  if($a{$i} == $b{$j}) {    echo $a{$i};    $i++;    $j++;    continue; //相等就继续  }  //在第二个串往后找  for($jj=$j; $jj<strlen($b); $jj++) {    if($a{$i} == $b{$jj}) break;  }  if($jj < strlen($b)) {    echo $a{$i};    $j = $jj+1;//指向第二个串的下一个位置  }  $i++;//找到自然要后移,找不到也后移(放弃第一个串的当前字符)} 

热点排行