拼寫單詞 仿造雜湊表的思想

2021-10-04 00:23:56 字數 1350 閱讀 5484

給你乙份『詞彙表』(字串陣列) words 和一張『字母表』(字串) chars。

假如你可以用 chars 中的『字母』(字元)拼寫出 words 中的某個『單詞』(字串),那麼我們就認為你掌握了這個單詞。

注意:每次拼寫時,chars 中的每個字母都只能用一次。

返回詞彙表 words 中你掌握的所有單詞的 長度之和。

輸入示例:words = ["cat","bt","hat","tree"], chars = "atach"

輸出示例:6

解釋:可以形成字串 "cat" 和 "hat",所以答案是 3 + 3 = 6。

1 <= words.length <= 1000

1 <= words[i].length, chars.length <= 100

所有字串中都僅包含小寫英文本

c++函式形式為int countcharacters(vector& words, string chars)

題目的需求其實很簡單,只需要字母表中的相應字元詞彙表每個單詞的相應字元要多,就能認定掌握單詞。

既然這樣,字母表的作用其實就是提供相應字元的數量,僅此而已,然後對於字串,遍歷每個字元是必須的,遍歷每個字元的時候,都考慮一下字母表中的字元是否還足夠,不足夠就直接退出迴圈,足夠就一直遍歷下去,如果能遍歷完,說明這個單詞可以掌握。

我們的問題就簡化到了如何記錄相應字元的個數,毫無疑問,第一思路肯定是雜湊表,的確,用雜湊表也可以很快的解決,但是,有了昨天的前車之鑑,我開始思考更加高效的方法。

用雜湊表肯定時間還是會稍長一點,我們可以用乙個陣列仿造出雜湊表,因為這些字母都是有規律的,無非就是0-26個連續字元,而且在ascii表中還是連續存在的,所以我們就可以直接拿下標當鍵值用,這樣訪問的效率非常高。

這就是用陣列仿造的雜湊表。

class solution {

public:

int countcharacters(vector& words, string chars) {

int count=0,i,j;

vectortable(26,0);

for(int i=0;itable1(table);

for(j=0;j注意每次開始遍歷乙個字串的時候,要初始化表中的內容。

atfwus  --writing  by 2020--03--17

雜湊表的思想

假設你們班級100個同學每個人的學號是由院系 年級 班級和編號組成,例如學號為01100168表示是1系,10級1班的68號。為了快速查詢到68號的成績資訊,可以建立一張表,但是不能用學號作為下標,學號的數值實在太大。因此將學號除以1100100取餘,即得到編號作為該錶的下標,那麼,要查詢學號為01...

單詞到雜湊表的唯一對映演算法

programming pearls 程式設計珠璣 15。雜湊表是一種資料結構。可用雜湊表中的元素唯一地指向另一種資料結構。如程式設計珠璣介紹的用雜湊表元素指向儲存了 單詞和單詞數 的結構體,單詞從輸入流 一篇文章,一本書 中得來。可以將每次從輸入流中讀到的資料儲存在棧和堆中。1 雜湊表和儲存資料的...

雜湊表(雜湊表)的定義

chapter 雜湊表 雜湊表 1.雜湊表 雜湊表 的定義 2.雜湊表是怎麼進行查詢的?3.雜湊函式設計 直接定址法 4.雜湊函式設計 除留餘數法 5.雜湊衝突處理 開放定址法 6.雜湊衝突處理 鏈位址法 7.雜湊表的鏈位址法實現 8.linux核心中的hash與bucket 9.引入雜湊桶的概念來...