最短摘要生成

2021-06-08 13:18:02 字數 953 閱讀 4840

問題定義:給定乙個字串str,以及乙個關鍵字字串陣列key,求str中包含key中所有字串的最短子串。

基本方法:雙指標掃瞄字串

詳細演算法:1.使用start和end兩個整數來指示掃瞄位置。均初始化為0。

2.對end加1,直到str[start,end]中包含所有關鍵字,或者end>=strlen(str)

3.對start加1,直到str[start,end]中不能再包含所有的關鍵字。

4.若str[start,end]的長度小於上次記錄的長度abstractlen,則將當前長度賦給abstractlen;

5.重複2-4步,直到end>=strlen(str);如果是第一次就滿足這個條件,那說明str不能包含所有關鍵字,則返回null;否則返回查詢到的子串.

**:

#include#include#includeint allkeyin(char *str,char **key,int start,int end)

free(buf);

return 1;

}char *bestabstract(char *str,char **key)

} abstract = (char *)malloc(sizeof(char)*(abstractlen+1));

memcpy(abstract,str+abstractstart,abstractlen);

abstract[abstractlen]='\0';

return abstract;

}int main(void)

; char *abstract = bestabstract(str,key);

if(abstract)

else

printf("not all key can be found in the string\n");

return 0;

}

最短摘要生成

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

最短摘要生成

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

生成最短摘要

如下 演算法思想 從頭掃瞄輸入字串,找到第乙個在關鍵字中出現的單詞 記錄其偏移量,繼續往後掃瞄得到出現在關鍵字中的第二個單詞 可以 和第乙個相同 一直到此子串包含所有的關鍵字,此時也需要記錄 其偏移量,計算其大小 接下來繼續從以上子串中的第二個被找到的關鍵字 開始掃瞄.一直到結束,最後選出距離最小的...