題目:有搜尋後的網頁分詞序列 陣列w 其中w[0]、w[1]、...w[n]為分好的詞。
找到w中最小的範圍w[i]~w[j]讓其包括所有的q。
思路:最想當然的思路就是從w[0]開始,對每個q遍歷判斷有沒有一樣的,截取出第乙個包含q中元素的w[i]到最後乙個包括q中元素的w[j]。需要o(mn)次比較。
如果前提能夠肯定w中包含所有的q那就,先從w[0]開始找到第乙個包含q的,再從w[n-1]向前找第乙個包含q的。
上面的思路有問題,因為w中可能重複的包含了q中的元素,我們找最短的是要w[i-j]中沒有重複的q元素
為了去掉重複的數字,就先找到乙個全部包含q的範圍,然後去掉第乙個元素,再找包含全部q的範圍,依次類推。記錄下最短的範圍。就是答案中的解法二。解法二的偽**如下:
注意其中對頭和尾分別使用了兩個指標。
int ntargetlen = n + 1;int pbegin = 0;
int pend = 0;
int nlen = n;
int nabstractbegin = 0;
int nabstractend = 0;
while (true)
while(isallexisted())
pbegin++;
}if(pend >= n)
break;
}
自己還想了一種,就是先把w中所有與q相同的都先記下來位置,然後用圖的方法找經過所有節點的最小路徑。但是由於解法二已經是o(mn)了,用圖的話,光記錄位置就要o(mn)划不來,就沒做了。
程式設計之美 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 次比較。如果前提能夠...
程式設計之美 最短摘要生成
本來以為這個會很難的,因為自己不是很了解這方面的東西。ok 看了程式設計之美的code後 感覺很好,類似kmp演算法,跳過已經比對過的字串,然後向後移動。思路就是 我的句子 hello are you bottom of do the is bot doke astring 程式設計之美的思路 就是...