生活随笔
收集整理的這篇文章主要介紹了
五.串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
串(string)是由零個或者多個字符組成的有限序列,又名叫字符串.
串中的字符數目稱為串的長度
零個字符的串稱為空串
串的比較是通過組成串的字符之間的編碼來進行的,而字符的編碼指的是字符在對應字符集中的序號
ASCII碼由8位二進制數表示一個字符
串的順序存儲結構
用一組地址連續的存儲單元來存儲串中的字符序列的(定長數組來定義)
計算機中存在一個自由存儲區,叫做”堆”
串的鏈式存儲結構,和線性表相似,一個結點可以存儲一個字符,也可以存儲多個字符
樸素的模式匹配算法
從頭到尾,逐個進行字符之間的對比,時間復雜度為O{(n-m+1)*m}
KMP模式匹配算法
避免重復遍歷,時間復雜度O(n+m)
/*通過計算返回子串T的next數組*/
void get_next(String T,int *next)
{int i,j;i=1;j=0;next[1] = 0;while(i<T[0]){if(j==0 || T[i] == T[j]){/* T[i]表示后綴的單個字符 */++i; /* T[j]表示前綴的單個字符 */++j;next[i] = j;}else{j=next[j]; /*若字符相同,則j值回溯*/}}
}int Index_KMP(String S,String T,int pos)
{int i=pos;// i用于主串S當前位置下標值,若pos不為1,則從pos位置開始匹配int j=1; //j用于子串T中當前位置的下標值int next[255]; //定義一個next數組get_next(T,next); //對串T進行分析,得到next數組while(i<=S[0] && j<=T[0]) //如果i小于S的長度且j小于T的長度時候,循環繼續{if(j==0 || S[i]==T[j]){++i;++j;}else //指針后退 重新開始匹配{j = next[j]; //j退回合適的位置,i值不變}}
}
總結
以上是生活随笔為你收集整理的五.串的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。