<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刷題實(shí)戰(zhàn)288:單詞的唯一縮寫

          共 3031字,需瀏覽 7分鐘

           ·

          2021-06-12 21:51

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

          今天和大家聊的問題叫做 單詞的唯一縮寫,我們先來看題面:
          https://leetcode-cn.com/problems/unique-word-abbreviation/

          假設(shè)你有一個(gè)字典和一個(gè)單詞,請(qǐng)你判斷該單詞的縮寫在這本字典中是否唯一。
          若單詞的縮寫在字典中沒有任何 其他 單詞與其縮寫相同,則被稱為單詞的唯一縮寫。

          示例


          給定 dictionary = [ "deer", "door", "cake", "card" ]
          isUnique("dear") -> false
          isUnique("cart") -> true
          isUnique("cane") -> false
          isUnique("make") -> true


          解題


          一個(gè)單詞的縮寫可以表示成第一個(gè)字母+中間字母個(gè)數(shù)+最后一個(gè)字母。給一個(gè)單詞字典和一個(gè)單詞,判斷這個(gè)單詞的縮寫是唯一的,即字典的單詞縮寫中沒有這個(gè)縮寫或者有這個(gè)縮寫但和這個(gè)單詞是一樣的(注意這種情況的處理)。

          解法:定義一個(gè)函數(shù)用來操作縮寫單詞,對(duì)于字典中的所有單詞進(jìn)行縮寫并存入另一個(gè)哈希表(key為縮寫后的單詞,value為set)。再對(duì)單詞進(jìn)行縮寫,然后判斷單詞的縮寫是否在哈希表中出現(xiàn),如果沒出現(xiàn)那肯定是唯一的。如果出現(xiàn)了還要看set里存的是不是只是這個(gè)單詞,如果有其它單詞出現(xiàn)就不是唯一的。


          public class ValidWordAbbr {
              Map<String, Set<String>> map;
              public ValidWordAbbr(String[] dictionary) {
                  map = new HashMap<>();
                  for (String s : dictionary) {
                      String abbr = getAbbr(s);
                      if (!map.containsKey(abbr)) {
                          map.put(abbr, new HashSet<String>());
                      }
                      map.get(abbr).add(s);
                  }
              }
           
              public boolean isUnique(String word) {
                  String abbr = getAbbr(word);
                  if (!map.containsKey(abbr) || (map.get(abbr).contains(word) && map.get(abbr).size() == 1)) {
                      return true;
                  }
                  return false;
              }
               
              private String getAbbr(String s) {
                  if (s.length() < 3) {
                      return s;
                  }
                  int len = s.length();
                  return s.substring(0, 1) + (len - 2) + s.substring(len - 1);
              }
          }


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

          上期推文:

          LeetCode1-280題匯總,希望對(duì)你有點(diǎn)幫助!
          LeetCode刷題實(shí)戰(zhàn)281:鋸齒迭代器
          LeetCode刷題實(shí)戰(zhàn)282:給表達(dá)式添加運(yùn)算符
          LeetCode刷題實(shí)戰(zhàn)283:移動(dòng)零
          LeetCode刷題實(shí)戰(zhàn)284:頂端迭代器
          LeetCode刷題實(shí)戰(zhàn)285:二叉搜索樹中的順序后繼
          LeetCode刷題實(shí)戰(zhàn)286:墻和門
          LeetCode刷題實(shí)戰(zhàn)287:尋找重復(fù)數(shù)


          瀏覽 71
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  亚洲在线免费播放 | 成人黄色视频网站在线观看 | 国产黄色视频在线 | 熟女日本在线 | 插逼网站视频 |