給你乙份『詞彙表』(字串陣列) words 和一張『字母表』(字串) chars。
假如你可以用 chars 中的『字母』(字元)拼寫出 words 中的某個『單詞』(字串),那麼我們就認為你掌握了這個單詞。
注意:每次拼寫時,chars 中的每個字母都只能用一次。
每個字典中的每個字元
返回詞彙表 words 中你掌握的所有單詞的 長度之和。
示例 1:
輸入:words = [「cat」,「bt」,「hat」,「tree」], chars = 「atach」
輸出:6
解釋:可以形成字串 「cat」 和 「hat」,所以答案是 3 + 3 = 6。
示例 2:
輸入:words = [「hello」,「world」,「leetcode」], chars = 「welldonehoneyr」
輸出:10
解釋:可以形成字串 「hello」 和 「world」,所以答案是 5 + 5 = 10。
1 <= words.length <= 1000
1 <= words[i].length, chars.length <= 100
所有字串中都僅包含小寫英文本母
思路:使用長度為26的陣列記錄各字元數量,依次對字元進行對比,使用26的前提是字串僅包含26個英文本元,如果有其它字元,需要擴大長度,比如256(全部ascii)。相同的思路也可以使用hashtable(字典)的方式實現,即使用字元作為key,字元個數作為value,只是在對比前使用containskey進行預判斷。
通過字元減去』a』表示字元的索引,首先獲取字典中每個字元個數
依次統計每個待檢查字串每個字元的個數
對每個字元個數進行驗證,滿足條件的字串進行長度累計
public
class
solution
}public
intcountcharacters
(string
words,
string chars)}if
(flag)
}return result;
}}
思路:原理跟解法二一樣,不過利用python的庫函式counter,來對原字串進行統計:
獲取字典中各字元個數
依次獲取各單詞中字元個數
對所有單詞中所有字元個數不大於字典中對應個數時,累加單詞長度
class
solution
:# author: [email protected]
defcountcharacters
(self, words: list[
str]
, chars:
str)
->
int:
dc = collections.counter(chars)
cnt =
0for w in words:
dw = collections.counter(w)
cnt +=
len(w)
ifall
([v<=dc[k]
for k,v in dw.items()]
)else
0return cnt
思路:暴力法就是最直接的思路,直接使用words去跟字典中元素進行對比,每次對比完清除對比字元。
將每個單詞轉換為字元陣列,用於單個字元進行對比
將字典轉換為字元陣列,如果記憶體吃緊或字典很大,也可以在第一次獲取後之後使用時使用淺拷貝,來節約臨時變數申請。
依次對單詞進行對比,如果滿足要求,則進行累計計數
public
class
solution
arrchar[idx]
='#'
;//清除原字元}if
(flag)
}return result;
}}
伍六七帶你學演算法 入門篇 拼寫單詞
力扣解題,每日一題 1160.拼寫單詞 難度 簡單 給你乙份 詞彙表 字串陣列 words 和一張 字母表 字串 chars。假如你可以用 chars 中的 字母 字元 拼寫出 words 中的某個 單詞 字串 那麼我們就認為你掌握了這個單詞。注意 每次拼寫時,chars 中的每個字母都只能用一次。...
貝葉斯演算法(2)貝葉斯演算法實現單詞拼寫檢查器
import re,collections 把語料中的單詞全部抽取出來,轉成小寫,並且去除單詞中間的特殊符號 defwords text return re.findall a z text.lower deftrain features 要是遇到我們從來沒有過見過的新詞怎麼辦.假如說乙個詞拼寫完全...
查詢演算法 3種
思路分析 1.首先需要確定該陣列的中間下標 2.讓需要查詢的數 findval 和 arr mid 比較 結束遞迴的條件 1.找到就結束遞迴 2.遞迴完整個陣列,仍沒有找到,也需要結束遞迴,當left right 就需要退出 實現 第乙個方法適用於陣列中只有乙個待查詢的結果 第二個方法適用於陣列中有...