会员
周边
众包
新闻
博问
闪存
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
no pain no gain
hard working
博客园
::
首页
::
博问
::
闪存
::
新随笔
::
联系
::
订阅
::
管理
::
公告
串的模式匹配算法之二:首尾匹配算法
using
System;
namespace
EasyIndex
{
class
Index
{
static
void
Main(
string
[] args)
{
string
s
=
"
acabaabcaabaabcac
"
;
string
m
=
"
abaabcac
"
;
int
i
=
0
;
int
j
=
0
;
while
(i
<
s.Length
&&
j
<
m.Length)
{
if
(s[i]
==
m[
0
])
//
判断两串的第一个元素是否相等
{
if
(s[i
+
m.Length
-
1
]
==
m[m.Length
-
1
])
//
如果头元素相等,再判断尾元素是否相等;
{
i
=
1
;
j
=
0
;
while
(i
<
s.Length
&&
j
<
m.Length)
//
如果头尾都相等,再从第二个元素到倒数第二个元素判断;
{
if
(s[i]
==
m[j])
{
i
++
;
j
++
;
}
else
{
i
=
i
-
j
+
1
;
j
=
0
;
}
}
}
else
{
i
=
i
-
j
+
1
;
j
=
0
;
}
}
else
{
i
=
i
-
j
+
1
;
j
=
0
;
}
}
if
(j
>=
m.Length)
//
说明m是s的一个子串,而且pos是i-m.Lengh+1,因为数组从0开始计数;
{
Console.WriteLine(
"
m与s中第
"
+
Convert.ToString(i
-
m.Length
+
1
)
+
"
个元素开始的子串相匹配!
"
);
}
else
{
Console.WriteLine(
"
m不是s的子串!
"
);
}
}
}
}
posted on
2006-09-26 22:05
龚明秋
阅读(
1024
) 评论(
0
)
编辑
收藏
举报
刷新页面
返回顶部