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