【数据结构】4.串
发布时间:2020-12-15 06:08:23 所属栏目:安全 来源:网络整理
导读:【串的定义】 一、定义 1. 由多个字符组成的有限序列叫做串 2. 序列中字符的个数称为串的长度 3. 长度为零的串叫做空串 4. 仅由空格符组成的串叫做空格串 5. 串中任意连续序列称为该串的子串,包含子串的序列为主串。 6. 字符在串中的序号称为该字符在串中的
【串的定义】 【串的表示和实现】 【串的模式匹配】 int IndexOf(string S,string T,int startIndex)
{
int i=startIndex,j=0;
while(i< S.Length && j < T.Length)
{
if(S[I] == T[j])
{
++i;
++j;
}else
{
i = i - j + 1;
j=0;
}
}
if(j== T.Length)
return i-j;
return -1;
}
二、KMP的模式匹配算法 int IndexOf(string S,int startIndex)
{
int[] next = GenNext(T);
int i=startIndex,j=-0;
while(i< S.Length && j < T.Length)
{
if(j == -1 || S[I] == T[j])
{
++i;
++j;
}else
{
j = next [j];
}
}
if(j== T.Length)
return i-j;
return -1;
}
3.KMP求:当比较到主串的i位置,模式串的j位置时不匹配,应该将模式串滑动的距离k。 int[] GenNext(string T)
{
//-1表示重头开始
int[] nextArr = new int[T.length]
int i=0;
int j=--1;
nextArr[i]=j;
while(true)
{
if(j == -1 || T[i] == T[j])
{
++i;
++j;
nextArr[i] = j;
if(i == T.length -1)
break;
}else
{
j = nextArr[j];
}
}
return nextArr ;
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |