KMP算法C#实现
来源:互联网 发布:anything软件 编辑:程序博客网 时间:2024/04/29 12:11
next函数 求出模式串 向右滑动位数
将模式串的str的next函数值 存入 数组next
static void GetNextVal(string str, int [] next)
{
int i = 0;
int j = -1;
next[0] = -1;
while (i < str.Length - 1)
{
if (j == -1 || str[i] == str[j])
{
i++;
j++;
next[i] = j;
}
else
{
j = next[j];
}
}
}
KMP算法
static int KMP(string zstr, string mstr)
{
int i, j;
int[] next = new int[mstr.Length];
GetNextVal(mstr, next);
i = 0;
j = 0;
while (i < zstr.Length && j < mstr.Length)
{
if (j == -1 || zstr[i] == mstr[j])
{
++i;
++j;
}
else
{
j = next[j];
}
}
if (j == mstr.Length)
return i - mstr.Length;
return -1;
}
static void Main(string[] args)
{
string zstr, mstr;
zstr = Console.ReadLine();
mstr = Console.ReadLine();
int pos1;
pos1 = KMP(zstr, mstr);
if (pos1 == -1) Console.WriteLine("没有匹配的字符串!");
else Console.WriteLine(pos1);
Console.Write("请按任意键继续。。");
Console.ReadKey(true);
}
}
将模式串的str的next函数值 存入 数组next
static void GetNextVal(string str, int [] next)
{
int i = 0;
int j = -1;
next[0] = -1;
while (i < str.Length - 1)
{
if (j == -1 || str[i] == str[j])
{
i++;
j++;
next[i] = j;
}
else
{
j = next[j];
}
}
}
KMP算法
static int KMP(string zstr, string mstr)
{
int i, j;
int[] next = new int[mstr.Length];
GetNextVal(mstr, next);
i = 0;
j = 0;
while (i < zstr.Length && j < mstr.Length)
{
if (j == -1 || zstr[i] == mstr[j])
{
++i;
++j;
}
else
{
j = next[j];
}
}
if (j == mstr.Length)
return i - mstr.Length;
return -1;
}
static void Main(string[] args)
{
string zstr, mstr;
zstr = Console.ReadLine();
mstr = Console.ReadLine();
int pos1;
pos1 = KMP(zstr, mstr);
if (pos1 == -1) Console.WriteLine("没有匹配的字符串!");
else Console.WriteLine(pos1);
Console.Write("请按任意键继续。。");
Console.ReadKey(true);
}
}
0 0
- KMP算法C#实现
- KMP算法 C#简单实现
- c# kmp算法
- KMP算法及改进KMP算法实现
- [数据结构]KMP算法实现
- KMP算法的实现
- KMP算法实现
- KMP算法实现
- KMP 算法实现
- kmp算法实现
- KMP算法实现
- KMP算法和实现
- KMP算法实现
- KMP算法及实现
- KMP算法的实现
- KMP算法实现
- java实现kmp算法
- KMP算法C++实现
- Xcode无法设置outlet
- Page 9,自立题四
- C#字符串
- mac 删除文件夹里所有的.svn文件
- windows平台下安装python的setuptools工具
- KMP算法C#实现
- Erlang gen_server进程调用实例
- 黑马程序员----java之集合(1)
- SQL函数大全
- VS 2010配置Qt 4.8.5 (VS2008类似)
- 再坚持会儿
- 通过html和cgi实现拍照显示功能
- js禁用回退键[backspace键]浏览历史跳转的解决办法
- ListView嵌套GridVIew(2)