定義された文字列
ゼロ文字以上の文字列の有限列、文字列と呼ばれるだけ空白を含む文字列。文字列の文字列の長さに含まれる文字の数は、と呼ばれる長さゼロの文字列は空の文字列と呼ばれます。部分文字列の文字列の文字列列番号のサブシーケンスと呼ばれる第1の文字列のおかげ連続した文字を、メインストリングの位置における主部分文字列で参照されます。
文字列の比較は、各文字辞書行に基づいている文字との間の関係の大きさを表すASCIIコードを有しています。
パターンマッチング、最初とモードTの最初の文字列から主人公は、最初の文字比較の一致が同じ場合には完了するまで、より多くのフォローアップがされるそうでない場合、メインの文字列(Tは、サブ文字列を一致させることです)再試合を戻します。
int Index(string s, string t){
int lens = s.length();//计算串s、t的长度
int lent = t.length();
int i = 0;
int j = 0;
while (i < lens&&j < lent){//如果i、j都各自小于lens和lent
if (t[j] == s[i]){//如果子串的t[j]和主串的s[i]相等
++i;//各自索引都自增
++j;
}
else{//否则,主串的索引比刚开始后移一个;子串的索引变为0
i = i - j + 1;
j = 0;
}
}
if (j == lent){//如果最j和lent的大小一样,证明找到了,返回子串在主串中的索引
return i - lent;
}
else{//否则返回-1
return -1;
}
}
KMPアルゴリズムNEXT NEXTキーは、[I] iの文字列で表され、最初の開始の主要最大一致文字列の長さを終了されたアレイ・アレイに記憶されます。
next(char *T ,int next[])
{
int i=1,j=0,k=0;
int Tlen = strlen(T);
next[0] = 0;
next[1] = 0;
while(i < Tlen)
{
printf("next while %d,T[i%d]=%c,T[j%d]=%c\n",k++,i,T[i],j,T[j]);
if(T[i] == T[j] || j==0)
{
++i;
++j;
next[i] = j;
} else {
j = next[j];
}
}
for(i=0 ; i<Tlen ; i++)
printf(" next[%d]= %d ",i,next[i]);
printf("\n");
return;
}
ストレージアレイ
常に1次元配列をメモリに格納されています。
圧縮されたストレージ
唯一の上三角または下三角行列の行を保つ必要が圧縮されたストレージの対称アレイ
対角行列記憶
例えば。
2,1,0,0,0、
9,3,4,0,0、
0,7,5,3,0、
0,0,5,4,2、
0,0,0,1,1
対角線と双方向の両側にのみデータを圧縮行列は、行列の行の圧縮列になるようにtが側へ押圧されるすべての行を格納することで、その後、Tは=私は、Sがj-iは= +1;別の方法は、行によって記憶されています
あまりに疎行列ので0のみトリプルデータブランクレコードを省略することができ、構造体の配列からなる各座標データを実現することができます。
またはデータベースノードタイプの架橋されたリストを使用する方法は、ゼロノードは、次の二つの非ゼロのピア・ノードと同一の次の列へのポインタを含みます。