LeetCode 1487. 保证文件名唯一(哈希map)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1487. 保证文件名唯一(哈希map)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
給你一個長度為 n 的字符串數組 names 。你將會在文件系統中創建 n 個文件夾:在第 i 分鐘,新建名為 names[i] 的文件夾。
由于兩個文件 不能 共享相同的文件名,因此如果新建文件夾使用的文件名已經被占用,系統會以 (k) 的形式為新文件夾的文件名添加后綴,其中 k 是能保證文件名唯一的 最小正整數 。
返回長度為 n 的字符串數組,其中 ans[i] 是創建第 i 個文件夾時系統分配給該文件夾的實際名稱。
示例 1: 輸入:names = ["pes","fifa","gta","pes(2019)"] 輸出:["pes","fifa","gta","pes(2019)"] 解釋:文件系統將會這樣創建文件名: "pes" --> 之前未分配,仍為 "pes" "fifa" --> 之前未分配,仍為 "fifa" "gta" --> 之前未分配,仍為 "gta" "pes(2019)" --> 之前未分配,仍為 "pes(2019)"示例 2: 輸入:names = ["gta","gta(1)","gta","avalon"] 輸出:["gta","gta(1)","gta(2)","avalon"] 解釋:文件系統將會這樣創建文件名: "gta" --> 之前未分配,仍為 "gta" "gta(1)" --> 之前未分配,仍為 "gta(1)" "gta" --> 文件名被占用,系統為該名稱添加后綴 (k),由于 "gta(1)" 也被占用,所以 k = 2 。 實際創建的文件名為 "gta(2)" 。 "avalon" --> 之前未分配,仍為 "avalon"示例 3: 輸入:names = ["onepiece","onepiece(1)","onepiece(2)","onepiece(3)","onepiece"] 輸出:["onepiece","onepiece(1)","onepiece(2)","onepiece(3)","onepiece(4)"] 解釋:當創建最后一個文件夾時,最小的正有效 k 為 4 ,文件名變為 "onepiece(4)"。示例 4: 輸入:names = ["wano","wano","wano","wano"] 輸出:["wano","wano(1)","wano(2)","wano(3)"] 解釋:每次創建文件夾 "wano" 時,只需增加后綴中 k 的值即可。示例 5: 輸入:names = ["kaido","kaido(1)","kaido","kaido(1)"] 輸出:["kaido","kaido(1)","kaido(2)","kaido(1)(1)"] 解釋:注意,如果含后綴文件名被占用,那么系統也會按規則在名稱后添加新的后綴 (k) 。提示: 1 <= names.length <= 5 * 10^4 1 <= names[i].length <= 20 names[i] 由小寫英文字母、數字和/或圓括號組成。2. 解題
class Solution { //C++ public:vector<string> getFolderNames(vector<string>& names) {unordered_map<string,int> m;vector<string> ans(names.size());int num;for(int i = 0; i < names.size(); ++i){if(!m.count(names[i]))//沒有出現過{m[names[i]]++;//計數+1ans[i] = names[i];//答案不變}else{ //出現過該單詞num = m[names[i]];//讀取當前應該的計數while(m.count(names[i]+"("+to_string(num)+")"))//出現過了num++;//數字增加,直到沒有出現過ans[i] = names[i]+"("+to_string(num)+")";//寫入答案m[names[i]] = num+1;//更新計數m[ans[i]]++;}}return ans;} }; class Solution:# py3def getFolderNames(self, names: List[str]) -> List[str]:m = {}ans = [""]*len(names)for i in range(len(names)):if names[i] not in m:m[names[i]] = 1ans[i] = names[i]else:num = m[names[i]]while names[i]+'('+str(num)+')' in m:num += 1ans[i] = names[i]+'('+str(num)+')'m[names[i]] = num+1m[ans[i]] = 1return ans總結
以上是生活随笔為你收集整理的LeetCode 1487. 保证文件名唯一(哈希map)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Hands On ML] 5. 支持向
- 下一篇: LeetCode 961. 重复 N 次