Re: [閒聊] 每日leetcode

看板Marginalman作者 (神楽めあ的錢包)時間4月前 (2025/07/30 22:28), 編輯推噓2(200)
留言2則, 2人參與, 4月前最新討論串1483/1548 (看更多)
1948. Delete Duplicate Folders in System 幾天前的每日 思路 : 把file system想像成一顆tree 根據題意如果有兩個node的subtree相同的話,那就要被移除 所以把每個node的subtree的值變成一個key 然後在去檢查每一個node的key是不是有重複出現 如果有的話就要移除 然後要記得用order_map來記錄每個node底下的child, 這樣才能保證每次child出現的順序相同 因為golang沒有order_map, 所以我是用unorder_map紀錄後, 再重新排序 golang code type treeNode struct { val string next map[string]*treeNode } func deleteDuplicateFolder(paths [][]string) [][]string { root := &treeNode{"/", make(map[string]*treeNode)} node2key := make(map[*treeNode]string) keyCounter := make(map[string]int) for _, path := range paths { tmp := root for _, child := range path { if tmp.next[child] == nil { tmp.next[child] = &treeNode{child, make(map[string]*treeNode)} } tmp = tmp.next[child] } } ans := [][]string{} getKey(&node2key, &keyCounter, root) for _, child := range root.next { dfs(&node2key, &keyCounter, child, []string{}, &ans) } return ans } func dfs(node2key *map[*treeNode]string, keyCounter *map[string]int, root * treeNode, curSlice []string, ans *[][]string) { curSlice = append(curSlice, root.val) key := (*node2key)[root] if (*keyCounter)[key] > 1 { return } tmp := make([]string, len(curSlice)) copy(tmp, curSlice) *ans = append(*ans, tmp) for _, child := range root.next { dfs(node2key, keyCounter, child, curSlice, ans) } } func getKey(node2key *map[*treeNode]string, keyCounter *map[string]int, root * treeNode) string { type name struct { val string node *treeNode } keyBuilder := strings.Builder{} name2Node := make([]name, 0, len(root.next)) for _, child := range root.next { name2Node = append(name2Node, name{child.val, child}) } slices.SortFunc(name2Node, func(a, b name) int { if a.val > b.val { return 1 } return -1 }) for _, node := range name2Node { keyBuilder.WriteString(node.val) keyBuilder.WriteString(getKey(node2key, keyCounter, node.node)) keyBuilder.WriteString("#") } key := keyBuilder.String() (*node2key)[root] = key if key != "" { (*keyCounter)[key]++ return key } return "*" } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.121.235.241 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1753885728.A.BFF.html

07/30 22:37, 4月前 , 1F
內推我
07/30 22:37, 1F

07/30 22:50, 4月前 , 2F
內推我
07/30 22:50, 2F
文章代碼(AID): #1eYYmWl_ (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1eYYmWl_ (Marginalman)