来自北大算法课的Leetcode题解:1487. 保证文件名唯一

该文章介绍了一个关于文件夹命名冲突的编程问题,类似于Windows系统的命名规则。解决方案是使用集合或哈希表来存储已存在的名字,当遇到重复的名字时,添加括号和递增数字作为后缀,直到找到未被使用的名称。给出的Python代码示例展示了如何实现这一逻辑,确保查找和添加操作具有O(1)的时间复杂度。
摘要由CSDN通过智能技术生成

代码仓库Github | Leetcode solutions @doubleZ0108 from Peking University.

  • 解法1(T11% S77%):是一道非常实际的问题,跟win系统下的文件夹创建规则很像,主要要看懂示例2和示例5,同时不要把问题想的太复杂。对于输入的names我们肯定是一个一个看,如果当前的name之前没有过那没啥说的直接原封不动,如果之前有了才要在后面加一个括号后缀,所以我们得有一个数据结构把之前见过的存下来,集合或者哈希表就可以,因为我们可能反反复复的要查找,用集合查找起来速度只有 O ( 1 ) O(1) O(1)。因此如果当前name在集合中没有我就原封不动放入结果并且添加进集合,如果之前存在了,我就开始不断模拟,在后面给他加上一个数字,指导找到加上这个数字括号后在集合中没有,那这个就是所谓的最小正整数
class Solution:
    def getFolderNames(self, names: List[str]) -> List[str]:
        memo = set()
        res = []
        for name in names:
            if name not in memo:
                memo.add(name)
                res.append(name)
            else:
                k = 1
                while True:
                    tmp = f"{name}({k})"
                    if tmp not in memo:
                        memo.add(tmp)
                        res.append(tmp)
                        break
                    k += 1
        return res

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

doubleZ0108

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值