<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實戰(zhàn)425:單詞方塊

          共 995字,需瀏覽 2分鐘

           ·

          2021-11-04 14:06

          算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個公眾號后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問題叫做?單詞方塊,我們先來看題面:
          https://leetcode-cn.com/problems/word-squares/



          示例


          示例 1

          輸入:
          ["area","lead","wall","lady","ball"]
          輸出:
          [
          [ "wall",
          "area",
          "lead",
          "lady"
          ],
          [?"ball",
          "area",
          "lead",
          "lady"
          ]
          ]

          解釋:
          輸出包含兩個單詞方塊,輸出的順序不重要,只需要保證每個單詞方塊內(nèi)的單詞順序正確即可。
          ?

          示例 2
          輸入:
          ["abat","baba","atan","atal"]

          輸出:
          [
          [ "baba",
          "abat",
          "baba",
          "atan"
          ],
          [?"baba",
          "abat",
          "baba",
          "atal"
          ]
          ]

          解釋:
          輸出包含兩個單詞方塊,輸出的順序不重要,只需要保證每個單詞方塊內(nèi)的單詞順序正確即可。


          解題

          思路 :
          開始直接暴力dfs妥妥的超時。正確做法是利用前綴特性,即

          如果我們知道結(jié)果中第一個單詞,那么下一個單詞前綴我們是知道的。

          比如有[ball],我們知道單詞方塊是 4X4,換句話說每個單詞長度都為4,其次下個單詞是a字母開頭的。

          假如我們找到一個a開頭長度為4單詞,變成[ball, area],那么第三個單詞的前綴是le長度為4單詞,依次類推。


          class?Solution?{
          public:
          ????int?limit;
          ????unordered_map<string,unordered_set<int>> mp;
          ????vector<vector<string>> wordSquares(vector<string>& words) {
          ????????if(words.empty() or?words[0].empty()){return?{};}
          ????????vector<vector<string>> res;
          ????????limit=words[0].size();
          ????????vector<int> cur;
          ????????for(int?i=0;i????????????string?prefix="";
          ????????????for(int?j=0;j????????????????prefix+=words[i][j];
          ????????????????mp[prefix].insert(i);
          ????????????}
          ????????}
          ????????for(int?i=0;i????????????cur.emplace_back(i);
          ????????????dfs(res,words,cur);
          ????????????cur.pop_back();
          ????????}
          ????????return?res;
          ????}

          ????void?dfs(vector<vector<string>>& res,vector<string>& words,vector<int>& cur){
          ????????// for(int x:cur){
          ????????// cout<
          ????????// }cout<<"-----------------"<
          ????????if(cur.size()>=limit){//加入結(jié)果數(shù)組
          ????????????vector<string> cur_res;
          ????????????for(int?i=0;i????????????????cur_res.emplace_back(words[cur[i]]);
          ????????????}
          ????????????res.emplace_back(move(cur_res));
          ????????????return;
          ????????}
          ????????string?prefix="";//先算下一個單詞需要滿足的前綴
          ????????for(int?j=0;j????????????prefix+=words[cur[j]][cur.size()];
          ????????}
          ????????if(mp.count(prefix)){
          ????????????for(int?i:mp[prefix]){
          ????????????????cur.push_back(i);
          ????????????????dfs(res,words,cur);
          ????????????????cur.pop_back();
          ????????????}
          ????????}
          ????}
          };


          好了,今天的文章就到這里,如果覺得有所收獲,請順手點個在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動力 。

          上期推文:

          LeetCode1-420題匯總,希望對你有點幫助!

          LeetCode刷題實戰(zhàn)421:數(shù)組中兩個數(shù)的最大異或值

          LeetCode刷題實戰(zhàn)422:有效的單詞方塊

          LeetCode刷題實戰(zhàn)423:從英文中重建數(shù)字

          LeetCode刷題實戰(zhàn)424:替換后的最長重復(fù)字符


          瀏覽 37
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青娱乐97 | 国产精品三级视频 | 一区二区小视频 | 操逼喷水在线观看 | 干逼视频免费 |