`我們生活在乙個字串的世界裡。位字串構成了整數和浮點數,數字串構成了**號碼,字母字串構成了單詞,長字串可以形成網頁,更長的字串則形成書。在遺傳學家的資料庫和人的細胞裡,存在著由字母a、c、g和t表示的極長的字串。
我們的第乙個問題是:為文件中包含的單詞生成乙個列表。我們的第乙個c++程式用到了標準模板庫中的sets和strings。主要思想就是用set的insert函式直接插入即可。而set只能儲存單詞,卻無法統計每個單詞出現的次數。為了統計每個單詞出現的次數,我們可以使用map這一資料結構。當然,為了節省時間,我們也可以自己建立雜湊表。
有乙個很簡單的辦法,暴力匹配所有字串,但時間複雜度是o(n^2),無法令人滿意。
還有乙個辦法,利用「字尾陣列」。「字尾陣列」是乙個字元指標陣列。下面是具體實現**:
#include#include#include#define maxn 500
char c[maxn], *a[maxn];
int pstrcmp(const void *a, const void *b) //字串陣列qsort的比較函式
int comlen(char *p, char *q)
return i;
}int main()
c[n] = null;
qsort(a, n, sizeof(char*), pstrcmp); //對字尾陣列排序
maxlen = 0;
maxi = 0;
for(i=0; imaxlen)
} printf("%.*s\n", maxlen, a[maxi]);
return 0;
}
原理:字串的資料結構。
雜湊。這一結構的平均速度很快,且易於實現。
平衡樹。這些結構在最壞的情況下也有較好的效能,c++標準模板庫的set和map的大部分實現都採用平衡樹。
字尾陣列。初始化指向文字中每個字元(或每個單詞)的指標陣列,對其排序就得到乙個字尾陣列。然後可以遍歷該陣列以查詢接近的字串,也可以使用二分搜尋查詢單詞或短語。
這是本書的最後一章,看完之後有一些啟發,但總覺得自己還有很多問題沒弄明白,需要再接再礪啊!
UNP 學習筆記 第十五章
1.描述符傳遞 接收傳送者的憑證用到的時候再看 2.struct sockaddr un 3.socketpair 4.書上有三四個例子,跟著學習一下如何建立乙個unix域套接字1.基礎 2.socketpair 1.unix域套接字往往比通訊兩端位於同乙個主機的tcp套接字快出一倍。2.unix域...
程式設計珠璣 第十五章 字串(二)
給定乙個文字作為輸入,找出其中最長的重複字串 1 檢視所有字串,並依次進行比較 for i 1,n for j i,if thielen comlen c i c j maxlen maxlen thielen maxi i maxj j 思路十分簡單,不過由於查詢所有字串對,因此時間最少為n n的...
第十五章預習
public class yuxi15 else 字串的比較 字串1.equals 字串2 比較兩個字串的值是否相同,返回boolean型別的值.如果相同,則返回真值,否則返回假值.字串1.equalsignorecase 字串2 忽略大小寫比較字串1和字串2.如果都相同則返回真值 否則返回假值 改...