給定多個 words,words[i] 的權重為 i 。
設計乙個類 wordfilter 實現函式wordfilter.f(string prefix, string suffix)。這個函式將返回具有字首 prefix 和字尾suffix 的詞的最大權重。如果沒有這樣的詞,返回 -1。
輸入:
wordfilter.f("a", "e") // 返回 0
wordfilter.f("b", "") // 返回 -1
注意:
words的長度在[1, 15000]之間。
對於每個測試用例,最多會有words.length次對wordfilter.f的呼叫。
words[i]的長度在[1, 10]之間。
prefix, suffix的長度在[0, 10]之前。
words[i]和prefix,suffix只包含小寫字母。
字典樹我們在構建字典樹的同時就把所有可能的前字尾進行組合,其中字尾我們放到前面,字首則採用完整的字串即可。這樣,我們在查詢時,先判斷字尾是否存在,再判斷字首是否存在,則dfs找符合要求的字串的最大權值。需要注意的是,為了區分前字尾,我們需要用乙個特殊的字元進行分割,這裡我們採用了};
trim* root;
wordfilter
(vector
& words)
now = now-
>next[x[k]
-'a'];
} now-
>isworld =
true
; now-
>value = i;}}
}int ans=-1
;void
dfs(trim* now)}}
intf
(string prefix, string suffix)
ans =-1
;dfs
(now)
;return ans;}}
;/**
* your wordfilter object will be instantiated and called as such:
* wordfilter* obj = new wordfilter(words);
* int param_1 = obj->f(prefix,suffix);
*/
745 字首和字尾搜尋
給定多個words,words i 的權重為i。設計乙個類wordfilter實現函式wordfilter.f string prefix,string suffix 這個函式將返回具有字首prefix和字尾suffix的詞的最大權重。如果沒有這樣的詞,返回 1。例子 輸入 wordfilter.f...
leetcode 523 560 字首和技巧
3 題解 leetcode523.連續的子陣列和 字首和的思路是這樣的,對於乙個給定的陣列 nums,我們額外開闢乙個字首和陣列進行預處理。int n nums.size 字首和陣列 presum i 就是nums 0.i 1 的和。那麼如果我們想求nums i.j 的和,只需要一步操作presum...
LeetCode 1652 拆炸彈(字首和)
你有乙個炸彈需要拆除,時間緊迫!你的情報員會給你乙個長度為 n 的 迴圈 陣列 code 以及乙個金鑰 k 為了獲得正確的密碼,你需要替換掉每乙個數字。所有數字會 同時 被替換。由於 code 是迴圈的,code n 1 下乙個元素是 code 0 且 code 0 前乙個元素是 code n 1 ...