LeetCode第 472 題 連線詞 C

2021-10-09 18:59:48 字數 1138 閱讀 9684

472. 連線詞 - 力扣(leetcode)

和leetcode第 140 題:單詞拆分 ii(c++)_zj-csdn部落格相似,但是做法不太一樣。

本題我用的是字典樹+dfs:

class trie;

};trie() : root(new trienode) {}

void insert(string s)

p->isend = true;

}//s:待查詢單詞,idx:查詢起點,cnt:計數

bool search(string s, int idx, int cnt)

}return false;//全部檢查完就會走到這一步,返回false

}private:

trienode *root;

};class solution

return res;

}private:

trie tree;

};

重點是search函式,一開始總想著像140題那樣遍歷單詞的長度來進行普通的search,但是行不通。直接將dfs查詢放到search函式裡面就可以了。

也可以不使用字典樹,使用雜湊表:

class solution 

return res;

}bool dfs(string &word, int start, int cnt)

return false;}};

可以發現這個方法其實相當的暴力(但是效率還是要比字典樹要好),對每乙個可能的長度都進行了回溯(dfs),截止條件就是其實位置start == word.size(),此時判斷計數器cnt是否大於2就可以了。

那我們可以借助140/139題的思想進行優化,不用每個長度都遍歷,只遍歷可能的長度:

class solution 

return res;

}bool dfs(string &word, int start, int cnt)

return false;}};

不過效率並沒有提公升多少。。。

報數(LeetCode第38題)

class solution def countandsay self,n type n int rtype str output str 1 for i in range n 1 for i in range 0 這是不執行的 count 0 s 儲存第i個的報數值,在新一輪迴圈之後清空 fris...

LeetCode第38題 報數

題目報數序列是乙個整數序列,按照其中的整數的順序進行報數,得到下乙個數。其前五項如下 1.12.11 3.21 4.1211 5.111221 1 被讀作 乙個一 即 11。11 被讀作 兩個一 即 21。21 被讀作 乙個二 乙個一 即 1211。給定乙個正整數 n 1 n 30 輸出報數序列的第...

Leetcode第35題筆記

class solution 此處需要注意,insert之後,it指標會變化,如果不將其返回值再次賦予it,會導致it指標亂指,答案會錯誤。nums.insert nums.end target return nums.size 1 如果覺得迭代器容易出錯,也可直接用陣列下標解決,兩種方式原理相同,...