保证文件名唯一[map计数]

前言

map的key使用起来还很简单,但是value要存什么,就需要对题有一定的理解和问题转换,有时不是死板的存一个set进去,或许存一个变量就替代了set,此时说明set中前面存的所有对题解都没关系,可以抽象舍弃。

一、保证文件名唯一

在这里插入图片描述

二、map计数

map存,该字符串的next,如果发生冲突,需要不断寻找next

func getFolderNames(names []string) []string {
    record := map[string]int{}
    ans := make([]string,len(names))
    for i,name := range names {
        if next,ok := record[name];ok {
            newName := getNewName(name,next)
            // 判定截止当前,最小合法的next为多少。
            for record[newName] != 0 {
                next++
                newName = getNewName(name,next)
            }
            // bug1:考虑的不够严谨,逻辑不够严谨,不够专心!!!
            // 把这个位置占了,得record,警示后来的字符串。
            record[newName] = 1
            record[name] = next + 1
            ans[i] = newName
        }else {
            record[name] = 1
            ans[i] = name
        }
    }
    return ans
}
func getNewName(name string,next int) string {
    sb := strings.Builder{}
    sb.WriteString(name)
    sb.WriteByte('(')
    sb.WriteString(strconv.Itoa(next))
    sb.WriteByte(')')

    return sb.String()
}
// map存,该字符串的next,如果发生冲突,需要不断寻找next

总结

1)做题还是有点不专心,考虑的不够严谨,思考逻辑不够严谨!比如每次向ans里面复制时,都说明了有个字符串被占了,需要设置record[newName] = 1,已警示后来的字符串。
2)涉及到大量字符串拼接,还是使用strings.Builder比较友好。

参考资料

[1] LeetCode 保证文件名唯一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值