HDU1251統計難題(字串處理)

2021-07-15 05:02:13 字數 1311 閱讀 7911

description

ignatius最近遇到乙個難題,老師交給他很多單詞(只有小寫字母組成,不會有重複的單詞出現),現在老師要他統計出以某個字串為字首的單詞數量(單詞本身也是自己的字首). 

input

輸入資料的第一部分是一張單詞表,每行乙個單詞,單詞的長度不超過10,它們代表的是老師交給ignatius統計的單詞,乙個空行代表單詞表的結束.第二部分是一連串的提問,每行乙個提問,每個提問都是乙個字串. 

注意:本題只有一組測試資料,處理到檔案結束. 

output

對於每個提問,給出以該字串為字首的單詞的數量. 

sample input

banana

band

beeabsolute

acmba

bband

abc

sample output

231

0

分析:題意很清晰,就是統計有此字首的單詞數量,關鍵是如何儲存是最後尋找時的時間縮短,不會時間超限,增加效率

因為單詞都是由小寫字母組成的,所以首字元至多有26種情況,所以把首字元一樣的放在乙個二維陣列中,節省了大量時間

還是就是比較的時候,注意倆個函式的區別:

1、這兩個函式的差別其實還是挺大的,差別在這裡:     

對於memcmp(),如果兩個字串相同而且count大於字串長度的話,memcmp不會在\0處停下來,會繼續比較\0後面的記憶體單元,直到_res不為零或者達到count次數。      

對於strncmp(),由於((__res   =   *cs   -   *ct++)   !=   0   ||   !*cs++)的存在,比較必定會在最短的字串的末尾停下來,即使count還未為零。具體的例子:      

char   a1="abcd";   

char   a2="abcd";       

對於memcmp(a1,a2,10),memcmp在兩個字串的\0之後繼續比較   

對於strncmp(a1,a2,10),strncmp在兩個字串的末尾停下,不再繼續比較。       

所以,如果想使用memcmp比較字串,要保證count不能超過最短字串的長度,否則結果有可能是錯誤的。

#include#includechar a[28][11111][11],b[11];

int main()

int c;

while(gets(b))//輸入字首

return 0;

}

HDU 1251 統計難題 (字串 Trie樹)

problem description ignatius最近遇到乙個難題,老師交給他很多單詞 只有小寫字母組成,不會有重複的單詞出現 現在老師要他統計出以某個字串為字首的單詞數量 單詞本身也是自己的字首 input 輸入資料的第一部分是一張單詞表,每行乙個單詞,單詞的長度不超過10,它們代表的是老師...

HDU 1251統計難題(字典樹)

經典的字典樹題目。字典樹 又稱單詞查詢樹,trie樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。ac code ...

HDU1251統計難題 字典樹

題目 problem description ignatius最近遇到乙個難題,老師交給他很多單詞 只有小寫字母組成,不會有重複的單詞出現 現在老師要他統計出以某個字串為字首的單詞數量 單詞本身也是自己的字首 input 輸入資料的第一部分是一張單詞表,每行乙個單詞,單詞的長度不超過10,它們代表的...