1. 程式人生 > >HDU-1251-字典樹

HDU-1251-字典樹

原題: Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重複的單詞出現),現在老師要他統計出以某個字串為字首的單詞數量(單詞本身也是自己的字首). Input 輸入資料的第一部分是一張單詞表,每行一個單詞,單詞的長度不超過10,它們代表的是老師交給Ignatius統計的單詞,一個空行代表單詞表的結束.第二部分是一連串的提問,每行一個提問,每個提問都是一個字串.

注意:本題只有一組測試資料,處理到檔案結束. Output 對於每個提問,給出以該字串為字首的單詞的數量. Sample Input banana band bee absolute acm

ba b band abc Sample Output 2 3 1 0 題意: 輸入不定量的以某個字元為字首的字串,輸入空行後開始提問,每一次提問都是一個字串代表字首,要求輸出以該字串為字首的字串數量。 題解: 一、 我們很容易想到用map<string,int>建立字首與次數的對映,之後直接輸出次數即可,但是這樣寫時間幾乎是別人的七倍。 附上AC程式碼:

#include <iostream>
#include <cstring>
#include <map>
#include <cstdio>
using namespace std;
map<string,int> pre;//定義一個map容器,以字串作為關鍵字,建立與出現次數(int)的對映
int main()
{
    char s[15];
    while(gets(s))//得到一整行的字串
    {
        if(s[0]=='\0')break;//由於gets()遇到回車會自動轉換為'\0',所以此語句為判斷是否為空行
        string tmp="";
        for(int i=0;i<strlen(s);++i)//對於每一個輸入的字串,記錄每一種開頭的map對映
        {
            tmp+=s[i];
            pre[tmp]++;
        }
    }
    while(cin>>s)
    {
        cout<<pre[s]<<endl;//直接輸出該字串對應的次數
    }
    return 0;
}

歡迎評論!