程式設計珠璣 第十五章 字串(二)

2021-07-15 21:02:08 字數 997 閱讀 3106

給定乙個文字作為輸入,找出其中最長的重複字串

(1)檢視所有字串,並依次進行比較:

for

i= [1,n)

for j=[i,)

if (thielen=comlen(&c[i],&c[j])) > maxlen

maxlen = thielen;

maxi = i;

maxj = j;

思路十分簡單,不過由於查詢所有字串對,因此時間最少為n*n的倍數。

(2)使用「字尾陣列」的思想,先求出輸入字串的所有字尾陣列,然後對字尾陣列進行排序,再在相鄰的字尾陣列間尋找相同字元的個數:

#include 

#include

#include

#define m 1

#define maxn 5000000

char c[maxn], *a[maxn];

int pstrcmp(char **p, char **q)

//兩個字串自左向右逐個字元相比(按ascii值大小相比較),直到出現不同的字元或遇'\0'為止。

int comlen(char *p, char *q)

int main()

c[n] = 0;

qsort(a, n, sizeof(char *), pstrcmp);//快速排序

for (i = 0; i < n - m; i++)

if (comlen(a[i], a[i + m]) > maxlen)

printf("%.*s\n", maxlen, a[maxi]);//使用*精度

return

0;}

執行結果舉例:

由於排序的存在,演算法的執行時間為o(nlogn)。

程式設計珠璣(2)第十五章學習筆記

我們生活在乙個字串的世界裡。位字串構成了整數和浮點數,數字串構成了 號碼,字母字串構成了單詞,長字串可以形成網頁,更長的字串則形成書。在遺傳學家的資料庫和人的細胞裡,存在著由字母a c g和t表示的極長的字串。我們的第乙個問題是 為文件中包含的單詞生成乙個列表。我們的第乙個c 程式用到了標準模板庫中...

第十五章預習

public class yuxi15 else 字串的比較 字串1.equals 字串2 比較兩個字串的值是否相同,返回boolean型別的值.如果相同,則返回真值,否則返回假值.字串1.equalsignorecase 字串2 忽略大小寫比較字串1和字串2.如果都相同則返回真值 否則返回假值 改...

第十五章 物件導向程式設計 一

1 例子 2 派生類對基類的protected成員一樣沒有訪問許可權 3 引用和指標的靜態型別和動態型別可以不同,這是c 多型的基石 4 有的時候想不用多型的機制,可以使用如下方法 item base basep derived double d basep item base netprice 4...