日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 527. 单词缩写(Trie树)

發(fā)布時間:2024/7/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 527. 单词缩写(Trie树) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給定一個由n個不重復非空字符串組成的數組,你需要按照以下規(guī)則為每個單詞生成最小的縮寫

  • 初始縮寫由起始字母+省略字母的數量+結尾字母組成。
  • 若存在沖突,亦即多于一個單詞有同樣的縮寫,則使用更長的前綴代替首字母,直到從單詞到縮寫的映射唯一。換而言之,最終的縮寫必須只能映射到一個單詞。
  • 若縮寫并不比原單詞更短,則保留原樣。
示例: 輸入: ["like", "god", "internal", "me", "internet", "interval", "intension", "face", "intrusion"] 輸出: ["l2e","god","internal","me","i6t","interval","inte4n","f2e","intr4n"]注意: n和每個單詞的長度均不超過 400。 每個單詞的長度大于 1。 單詞只由英文小寫字母組成。 返回的答案需要和原數組保持同一順序。

來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/word-abbreviation
著作權歸領扣網絡所有。商業(yè)轉載請聯(lián)系官方授權,非商業(yè)轉載請注明出處。

2. 解題

  • 對字符串進行分組(首尾字符+長度),這種情況,縮寫才可能一樣
  • 組內單詞插入trie樹,記錄每個節(jié)點的占用次數,如果只出現1個人占用的,即可以確定唯一的縮寫
class trie { public:trie* next[26] = {NULL};int freq = 0;void insert(string& s){trie* cur = this;for(int i = 0; i < s.size(); i++){if(!cur->next[s[i]-'a'])cur->next[s[i]-'a'] = new trie();cur = cur->next[s[i]-'a'];cur->freq++;}} }; class Solution { public:vector<string> wordsAbbreviation(vector<string>& dict) {unordered_map<string, vector<string>> group;unordered_map<string, int> w_id;for(int i = 0; i < dict.size(); ++i){string g = dict[i][0]+to_string(dict[i].size())+dict[i].back();group[g].push_back(dict[i]);//按首尾字符+長度信息給字符串分組w_id[dict[i]] = i;//序號信息}vector<string> ans(dict.size());for(auto& strs : group)//分組{trie* t = new trie(), *cur = t;for(auto& s : strs.second)t->insert(s);//組內單詞插入trie樹for(auto& s : strs.second)//遍歷組內的單詞{cur = t;string temp;//縮寫for(int i = 0; i < s.size(); i++)//在trie中查找{if(cur->next[s[i]-'a']->freq == 1)//自己獨有的字符{int count = s.size()-i-2;if(count >= 2)//縮寫字符超過1個temp = s.substr(0,i+1)+to_string(count)+s.back();elsetemp = s;break;}cur = cur->next[s[i]-'a'];}ans[w_id[s]] = temp;} }return ans;} };

332 ms 330.2 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的LeetCode 527. 单词缩写(Trie树)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。