字典樹leetcode習題

2021-10-06 06:54:20 字數 2916 閱讀 3455

給出乙個字串陣列words組成的一本英語詞典。從中找出最長的乙個單詞,該單詞是由words詞典中其他單詞逐步新增乙個字母組成。若其中有多個可行的答案,則返回答案中字典序最小的單詞。

若無答案,則返回空字串。

例項

輸入: 

words = ["w","wo","wor","worl", "world"]

輸出: "world"

解釋:

單詞"world"可由"w", "wo", "wor", 和 "worl"新增乙個字母組成。

思路:

插入每乙個word,構成一棵樹,查詢演算法時,判斷是否為該模式中最長的,如果不是,繼續尋找。

對比查詢每個模式中最長的詞,找到結果。

#include

class

solution};

void

insert

(string word)

node-

>end =

true;}

bool

search

(string word)

return

true;}

string longestword

(vector

& words)

string longest;

for(string s:words)

}return longest;

}private

: trienode*root;

};

如果我們可以將小寫字母插入模式串 pattern 得到待查詢項 query,那麼待查詢項與給定模式串匹配。(我們可以在任何位置插入每個字元,也可以插入 0 個字元。)

給定待查詢列表 queries,和模式串 pattern,返回由布林值組成的答案列表 answer。只有在待查項 queries[i] 與模式串 pattern 匹配時, answer[i] 才為 true,否則為 false。

例項

輸入:queries = ["foobar","foobartest","football","framebuffer","forcefeedback"], pattern = "fb"

輸出:[true,false,true,true,false]

示例:"foobar" 可以這樣生成:"f" + "oo" + "b" + "ar"。

"football" 可以這樣生成:"f" + "oot" + "b" + "all".

"framebuffer" 可以這樣生成:"f" + "rame" + "b" + "uffer".

思路:

將pattern生成一棵樹,查詢時:①小寫字母沒有匹配就放過②小寫字母匹配成功向樹的葉子節點前進③大寫字母沒匹配返回false④大寫字母匹配成功向樹的葉子節點前進;

**:

class

solution};

void

insert

(trie* root, string str)

node-

>end =

true;}

bool

search

(trie* root, string str)

else

}return node-

>end;

} vector<

bool

>

camelmatch

(vector

& queries, string pattern)

return res;}}

;

給一非空的單詞列表,返回前 k 個出現次數最多的單詞。

返回的答案應該按單詞出現頻率由高到低排序。如果不同的單詞有相同出現頻率,按字母順序排序.

例項

輸入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2

輸出: ["i", "love"]

解析: "i" 和 "love" 為出現次數最多的兩個單詞,均為2次。

注意,按字母順序 "i" 在 "love" 之前。

**參考題解中大神寫法

class

solution

; mapint> record_1;

//單詞->該單詞出現的個數

vector result;

for(

const

auto

& word:words)

//由於map不支援value的sort排序,所以必須將map轉換為vector才能進行sort自定義排序

vectorint>>

record_2

(record_1.

begin()

,record_1.

end())

;//sort的第三個引數是lambda表示式,其實和傳普通函式一樣,sort的第三個引數是支援二元謂詞的

sort

(record_2.

begin()

,record_2.

end(),

(const pairint>

& a,

const pairint>

& b));

//將vector的前k個元素新增到result中

for(

const

auto

& r:record_2)

return result;}}

;

字典樹習題

題意 給定多個字串,有些字串相同,請你統計每種字串的數量佔所有字串數量的百分比,按字典序輸出 思路 include include include include define ll long long using namespace std const int maxn 1e5 5 mapint ...

Leetcode 單雙字典樹

有n個只包含小寫字母的串s1 s2 sn 每次給你乙個只包含小寫字母的串t。如果串s存在字首s 它的奇數字的字元與t的奇數字字元完全相同,稱s為t的單匹配串,如果串s的偶數字字元與t的偶數字的字元全都相同,稱s為t的雙匹配串。現在給你m個字串,對於每個字串t,求s1 s2 sn 中有多少個串是t的單...

字典樹 leetcode 527 單詞縮寫

給定乙個由n個不重複非空字串組成的陣列,你需要按照以下規則為每個單詞生成最小的縮寫。初始縮寫由起始字母 省略字母的數量 結尾字母組成。若存在衝突,亦即多於乙個單詞有同樣的縮寫,則使用更長的字首代替首字母,直到從單詞到縮寫的對映唯一。換而言之,最終的縮寫必須只能對映到乙個單詞。若縮寫並不比原單詞更短,...