关于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
[解决办法]
相当于这样一个过程
$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++;//找到自然要后移,找不到也后移(放弃第一个串的当前字符)}