題目:有一段廣告,它由很多單詞構成,然後它有個摘要,即關鍵字,問包含摘要(關鍵字)的在廣告正文中的最短字串是什麼?
簡而言之,就是說求在原字串中包含所有關鍵字的最短子串行。
演算法思想:
將每個關鍵字在原字串中位置記錄在乙個陣列中,每個關鍵字對應乙個陣列,然後令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 給出了一種比較好的解法,策略還是使用雙指標,雙指標對於很多演算法設計很有價值,演算法的思想是採用兩個指標,開始兩個指標都...