雙指標策略(《程式設計之美》3 5 最短摘要生成)

2021-09-01 16:36:28 字數 668 閱讀 5757

本文源自《程式設計之美》3.5 最短摘要生成一課。

題意:在乙個字串中,找一些目標字串集合,找到包含所有目標字串的最小連續子串。題目雖然叫做「最短摘要生成」,但和實際上的搜尋snippet的計算還有較大差距。

解法:採用了「雙指標」策略,其思想在很多演算法設計中都有價值。思想是:開始兩個指標都指向緩衝區頭部,尾指標向後掃瞄,直到頭指標和尾指標中間包含了全部的關鍵字;那麼頭指標向後移動,直到包含全部關鍵字的這個條件失敗。這是擷取字串並和已取得的最小字串比較,如果小則替換。

下面是我的**

#include #if 0

#include //因為hash_map暫不為cpp標準,所以沒法#else

#include #define hash_map std::tr1::unordered_map

#endif

using namespace std;

void findminabstract(char* w, int wlen, char* q, int qlen)else if(qfoundcnt[w[begin]]==1)

}begin++;

}if(end>=wlen)

break;

}//顯示最短摘要

for(int i=0;i效果:

程式設計之美 3 5最短摘要的生成

看了下 程式設計之美 這本書,記錄下3.5節的理解。1.題意是什麼?題目含義就是在已知字串s1中搜尋含有字串s2的最小字串,例如,s1 abcdemkfdc s2 cdk 則應該返回 kfdc 含有 意思是什麼?即包含即可,不需要相同順序。原書寫的有點拗口,其實對於關鍵字 微軟亞洲研究院 使命 而言...

程式設計之美 3 5 最短摘要的生成

題目 有搜尋後的網頁分詞序列 陣列w 其中w 0 w 1 w n 為分好的詞。找到w中最小的範圍w i w j 讓其包括所有的q。思路 最想當然的思路就是從w 0 開始,對每個q遍歷判斷有沒有一樣的,截取出第乙個包含q中元素的w i 到最後乙個包括q中元素的w j 需要o mn 次比較。如果前提能夠...

程式設計之美 3 5 最短摘要的生成

題目 有搜尋後的網頁分詞序列 陣列w 其中w 0 w 1 w n 為分好的詞。找到w中最小的範圍w i w j 讓其包括所有的q。思路 最想當然的思路就是從w 0 開始,對每個q遍歷判斷有沒有一樣的,截取出第乙個包含q中元素的w i 到最後乙個包括q中元素的w j 需要o mn 次比較。如果前提能夠...