日期:2014-05-17  浏览次数:20411 次

关于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++;//找到自然要后移,找不到也后移(放弃第一个串的当前字符)
}