最短子串行 最短摘要

2021-09-06 02:51:13 字數 1231 閱讀 5870

題目:有一段廣告,它由很多單詞構成,然後它有個摘要,即關鍵字,問包含摘要(關鍵字)的在廣告正文中的最短字串是什麼?

簡而言之,就是說求在原字串中包含所有關鍵字的最短子串行。

演算法思想:

將每個關鍵字在原字串中位置記錄在乙個陣列中,每個關鍵字對應乙個陣列,然後令distance = max(a[i], b[j], c[k]) - min(a[i], b[j], c[k]),然後最小的那個元素被它所在陣列的下乙個元素取代,依次迴圈下去。這裡假設是三個關鍵字,然後就有三個陣列。

#include 

<

iostream

>

using

namespace

std;

intmax(

inta,

intb,

intc);

intmin(

inta,

intb,

intc);

intmain()}//

相隔的最短距離

intdistance;

//三個關鍵字的位置

intpostion1;

intpostion2;

intpostion3;

//用於迴圈的三個變數

intp =0

;intq =

0;intr =0

;int

minium

=max;

while

(a[p]

>=0&&

b[q]

>=0&&

c[r]

>=0)

if(min(a[p], b[q], c[r])

==a[p])p++

;else

if(min(a[p], b[q], c[r])

==b[q])q++

;else

if(min(a[p], b[q], c[r])

==c[r])r++

;}if(minium

!=max)

else

cout

<<"no

"<<

endl;

return0;

}int

max(

inta,

intb,

intc)

intmin(

inta,

intb,

intc)

最短摘要生成

問題定義 給定乙個字串str,以及乙個關鍵字字串陣列key,求str中包含key中所有字串的最短子串。基本方法 雙指標掃瞄字串 詳細演算法 1.使用start和end兩個整數來指示掃瞄位置。均初始化為0。2.對end加1,直到str start,end 中包含所有關鍵字,或者end strlen s...

最短摘要生成

題目 抽象點說,就是在乙個字串中,找一些目標字串,找到包含所有目標字串的最小字串。題目雖然叫做最短摘要生成,但和實際的搜尋snippet的計算還是有比較大的差距的。先來看看這些序列 w0,w1,w2,w3,q0,w4,w5,q1,w6,w7,w8,q0,w9,q1 w0,w1,w2,w3,q0,w4...

最短摘要生成

題目 抽象點說,就是在乙個字串中,找一些目標字串,找到包含所有目標字串的最小字串。題目雖然叫做最短摘要生成,但和實際的搜尋snippet的計算還是有比較大的差距的。解法 文獻 1 給出了一種比較好的解法,策略還是使用雙指標,雙指標對於很多演算法設計很有價值,演算法的思想是採用兩個指標,開始兩個指標都...