Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配。其核心思想是:在匹配过程中,模式串发现不匹配时,算法能跳过尽可能多的字符以进行下一步的匹配,从而提高了匹配效率。
<?php
/*
*@param $pattern 模式串
*@param $text 待匹配串
*/
function
mySunday(
$pattern
=
''
,
$text
=
''
){
if
(!
$pattern
|| !
$text
)
return
false;
$pattern_len
= mb_strlen(
$pattern
);
$text_len
= mb_strlen(
$text
);
if
(
$pattern_len
>=
$text_len
)
return
false;
$i
= 0;
for
(
$i
= 0;
$i
<
$pattern_len
;
$i
++){
//组装以pattern中的字符为下标的数组
$shift
[
$pattern
[
$i
]] =
$pattern_len
-
$i
;
}
while
(
$i
<=
$text_len
-
$pattern_len
){
$nums
= 0;
//匹配上的字符个数
while
(
$pattern
[
$nums
] ==
$text
[
$i
+
$nums
]){
$nums
++;
if
(
$nums
==
$pattern_len
){
return
"The first match index is $i\n"
;
}
}
if
(
$i
+
$pattern_len
<
$text_len
&& isset(
$shift
[
$text
[
$i
+
$pattern_len
]])){
//判断模式串后一位字符是否在模式串中
$i
+=
$shift
[
$text
[
$i
+
$pattern_len
]];
//对齐该字符
}
else
{
$i
+=
$pattern_len
;
//直接滑动pattern_len位
}
}
}
$text
=
"I am testing mySunday on sunday!"
;
$pattern
=
"sunday"
;
echo
mySunday(
$pattern
,
$text
);
运行结果:
The first match index is 25
原文链接:http://blog.csdn.net/fff058/article/details/52204233
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容