class solution {
public:
int ladderlength(string beginword, string endword, vector& wordlist) {
unordered_setdict(wordlist.begin(), wordlist.end());//把字典中的字元變成hash_set加速查詢
unordered_mapm;//存每乙個字串從beginword開始到現在的深度,也就是轉換了幾步?
//需要乙個佇列,每次遍歷一層,把符合條件的加入佇列,下一次進行考量
queueq;
q.push(beginword);//把第乙個元素放入佇列
m[beginword]=1;//第乙個元素到達只換乙個字元字串的長度為1
while(!q.empty()){
string cur = q.front();
q.pop();
for(int i =0;i這道題是bfs,廣度優先搜尋,那麼鄰居節點,就是把beginword的每乙個位置替換為a-z來進行下一層搜尋,我們需要乙個map用來存從開始beginword到當前word,cur的序列長度,當轉換的單詞new_string在字典中,如果恰好等於endword,那麼直接返回當前長度+1;如果不是endword,看一下是否曾經遍歷過(這裡面,防止重複遍歷,長度肯定是更長的,而我們要求最短的),如果沒有,那麼把new_string放入佇列,作為下次bfs的節點,同時更新從開始到new_string的序列長度等於當前cur的序列長度+1.
看到這種題,就覺得兩個for迴圈這麼替換,是不是太蠢了,時間複雜度一定很高吧,還是不要總想著一步到位,最樸素的思路先實現一下,其實兩個for的複雜度是26*length,算是o(n)的了,不是很誇張。此外乙個難點是,看到最短路徑,就覺得要設定乙個min標記啊,這題是通過限制非重複遍歷,來避開更長的遍歷,也是節省了時間複雜度。
字串 leetcode 43 字串相乘
給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 說明 num1 和 num2 的長度小於110。nu...
棧 字串 leetcode394 字串解碼
題目 解題思路 遍歷字串,如果遇到的是數,則把數存入num 如果遇到的是左括號,那麼將num壓入數棧,將左括號前面的字串ans壓入字串棧,然後將num清0,將ans也清空 如果遇到的是右括號,那麼將數棧的棧頂數彈出記為 k,然後將當前的ans重複k次,連線到字串棧的棧頂字串後面,然後將字串棧的棧頂字...
LeetCode43 字串相乘
給定兩個以字串形式表示的非負整數num1和num2,返回num1和num2的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 題目分析 如果兩個字串中有乙個為0,則結果是0 否則的話,將其中乙...