实现自定义字符串匹配功能的函数
在梁斌博士创建的“百司不录—PHP群”里,有网友提了一个关于字符串匹配的问题,是这样描述的“假设两个字符串所含有的字符和个数都相同,我们就叫这两个字符串匹配。比如,a
在梁斌博士创建的“百司不录—PHP群”里,有网友提了一个关于字符串匹配的问题,是这样描述的“假设两个字符串所含有的字符和个数都相同,我们就叫这两个字符串匹配。比如,abcda和adabc,含有的字符都一样并且每个字符出现次数也相同,只是顺序不同,所以这两个字符串是匹配的。怎样实现呢?要求高效。”对这个问题有些兴趣,所以编写了一个函数。功能实现是没问题,但是在效率上可能有些问题(BTW 实现逻辑太过清楚了,所以代码看上去显得很蠢。:-( )。大家有更高效的解决方案吗?
<?php /* 自定义匹配函数 Version 1*/ function isMatch($string1, $string2) { $array1 = array(); $array2 = array(); // 将字符串分解为数组 for ($i=0; $i<strlen($string1); $i++) $array1[] = $string1[$i]; for ($i=0; $i<strlen($string2); $i++) $array2[] = $string2[$i]; // 将数组转换为元素频度数组 $array1_count = array_count_values($array1); $array2_count = array_count_values($array2); // 将数组按键值升序排序 ksort($array1_count); ksort($array2_count); if ($array1_count == $array2_count) echo 'match success!'; else echo 'match fail!'; } // 测试 isMatch('abcda', 'adabc'); // 打印 'match success!'
2. [代码]实现自定义字符串匹配功能的函数 跳至 [1] [2] [全屏预览]
<?php /* 自定义匹配函数 Version 2*/ function isMatch($string1, $string2) { // 将字符串分解为数组 $array1 = str_split($string1); $array2 = str_split($string2); // 将数组转换为元素频度数组 $array1_count = array_count_values($array1); $array2_count = array_count_values($array2); if ($array1_count == $array2_count) echo 'match success! '; else echo 'match fail! '; } // 测试 isMatch('abcda', 'adabc'); // 打印 'match success!'
精彩图集
精彩文章