实现自定义字符串匹配功能的函数
在梁斌博士创建的“百司不录—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!'
精彩图集
精彩文章






