当前位置: 首页 > news >正文

LeetCode题目笔记——1487. 保证文件名唯一

文章目录

    • 题目描述
    • 题目链接
    • 题目难度——中等
    • 方法一:哈希表
      • 代码/Python
      • 代码/C++
    • 总结

题目描述

给你一个长度为 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] 由小写英文字母、数字和/或圆括号组成。

题目链接

题目难度——中等

方法一:哈希表

  我们需要一个哈希表seen来记录每个文件名的出现次数,同时以这个出现次数作为我们获取答案的依据之一。

代码/Python

class Solution:def getFolderNames(self, names):used_names = {}result = []for name in names:if name not in used_names:# 如果名称没有被占用,直接使用used_names[name] = 1result.append(name)else:# 如果名称被占用,就把出现次数++k = used_names[name]while f"{name}({k})" in used_names:k += 1used_names[f"{name}({k})"] = 1result.append(f"{name}({k})")used_names[name] = k + 1	# 下一次要判断的return result

代码/C++

class Solution {
public:vector<string> getFolderNames(vector<string>& names) {map<string, int> seen;vector<string> res;for(auto name: names){// seen.count返回出现次数,find返回指向元素的迭代器if(!seen.count(name)){res.push_back(name);seen[name] = 1;}else{int k = seen[name];while(seen.count(name + "(" + to_string(k) + ")")){k++;}string t = name + "(" + to_string(k) + ")";seen[t] = 1;res.push_back(t);seen[name] = k + 1;}}return res;}
};

  上面的代码还可以写得更简单一些,直接用一个while来代替if-else,以python为例:

class Solution:def getFolderNames(self, names):seen = dict()res = []for name in names:n = namewhile n in seen:n = f'{name}({seen[name]})'seen[name] += 1seen[n] = 1res.append(n)return res

在这里插入图片描述

总结

  方法一时间复杂度应该是O(N)级的,空间复杂度O(N)。

相关文章:

LeetCode题目笔记——1487. 保证文件名唯一

文章目录题目描述题目链接题目难度——中等方法一&#xff1a;哈希表代码/Python代码/C总结题目描述 给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹&#xff1a;在第 i 分钟&#xff0c;新建名为 names[i] 的文件夹。 由于两个文件 不能 共享相同…...

【概念辨析】结构体内存对齐

一、什么是结构体内存对齐 是使得结构体的每个成员能够在及其访问的特定存储单元上的一种方法。 通过这种方法可以使得机器访问效率加快&#xff0c;也可以使得平台一致性变高。 二、结构体对齐的规则 有两组代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS#include <…...

pg mysql oracle 中的schema

1、schema。 pg中的schema表示当前db中数据库对象的命名空间(namespace)&#xff0c;数据库对象包括但不限于表、函数、视图、索引等。 对于熟悉mysql的人来说&#xff0c;在第一次看到pg中的schema的概念时&#xff0c;可能会疑惑&#xff0c;schema不是表示database的吗&…...

电脑快捷方式删除文件后四种找回方法

快捷指令是一种用作替代快捷键操作的技术。也可以称为“快捷键”&#xff0c;“快捷方式”或“快捷键序列”&#xff0c;它们允许用户在非常快速和方便的方式建立特定操作序列&#xff0c;这对于执行重复性或提高效率非常有用。通过使用快捷指令&#xff0c;您可以执行快速复制…...

Session会话管理

会话管理Web会话管理概述常见的Web应用会话管理方式基于Server端的Session的管理方式基于Cookie的Session的管理方式Cookie与Session最大的区别Cookie-Based的管理方式基于Token-Based的管理方式Web会话管理的安全问题Web会话管理概述 会话管理&#xff1a;在进行人机交互的时…...

极智开发 | ubuntu源码编译cuda版opencv

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文介绍一下 ubuntu源码编译cuda版opencv。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq 如果你需要源码编译cpu版的opencv可以…...

umi学习(umi4)

umi 官方文档 官方建议使用 pnpm node版本在 14 以上 创建项目&#xff1a; 根据 包管理工具不同 &#xff0c;官方推荐 这里使用 pnpm&#xff1a; 1. pnpm dlx create-umilatest 2. 选择模板 &#xff08;这里使用 Simple App&#xff09; 想对module处理需要使用 Ant Desig…...

EasyPoi的excel模板预览与下载、导出简单/复杂数据

官方文档地址&#xff1a;easypoi官网&#xff0c;官方仅供参考&#xff0c;部分描述有问题 excel模板预览 准备工作 事先将整理好的excel模板存在项目中&#xff0c;如图 excel模板预览代码 GetMapping("excel")ApiOperation("excel预览")NoLogpubli…...

收个滴滴Offer:从小伙三面经历,看看需要学点啥?

说在前面 在尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;经常有小伙伴&#xff0c;需要面试大厂。 后续结合一些大厂的面试真题&#xff0c;给大家梳理一下学习路径&#xff0c;看看大家需要学点啥&#xff1f; 这里也一并把题目以及参考答案&#xff0c;收入咱…...

Spark Shuffle解析

1 Shuffle的核心要点 1.1 ShuffleMapStage与ResultStage ShuffleMapStage与ResultStage 在划分stage时&#xff0c;最后一个stage称为finalStage&#xff0c;它本质上是一个ResultStage对象&#xff0c;前面的所有stage被称为ShuffleMapStage。 ShuffleMapStage的结束伴随着…...

Qt 解决程序全屏运行弹窗引发任务栏显示

文章目录摘要在VM虚拟机器中测试setWindowFlags()关键字&#xff1a; Qt、 Qt::WindowStayOnTopHint、 setWindowFlags、 Qt::Window、 Qt::Tool摘要 今天眼看项目就要交付了&#xff0c;结果在测试程序的时候&#xff0c;发现在程序全品情况下&#xff0c;点击输入框&#x…...

【进阶】2、搭建K8s集群【v1.23】

[toc] 一、安装要求 在开始之前&#xff0c;部署Kubernetes集群机器需要满足以下几个条件&#xff1a; 一台或多台机器&#xff0c;操作系统 CentOS7.x-86_x64硬件配置&#xff1a;2GB或更多RAM&#xff0c;2个CPU或更多CPU&#xff0c;硬盘30GB或更多集群中所有机器之间网络…...

11面向接口编程(下):一切皆服务,服务基于协议

服务容器的实现 一个服务容器主要的功能是&#xff1a;为服务提供注册绑定、提供获取服务实例&#xff0c;所以服务容器至少有两个方法&#xff1a;注册方法 Bind、获取实例方法 Make。 对于注册的方法&#xff0c;直接将一个服务提供者注册到容器中&#xff0c;参数是之前定…...

不要以没时间来说测试用例写不好

工作当中,总会有人为自己的测试用例写得不够好去找各种理由,时间不够是我印象当中涉及到最多的,也是最反感。想写好测试用例&#xff0c;前提是测试分析和需求拆解做的足够好&#xff0c;通过xmind或者UML图把需求和开发设计提供的产品信息提炼出来。 我个人的提炼标准一般是&…...

day57-day58【代码随想录】二刷数组

文章目录前言一、螺旋矩阵||&#xff08;力扣59&#xff09;二、螺旋矩阵&#xff08;力扣54&#xff09;三、顺时针打印矩阵&#xff08;剑指 Offer29&#xff09;四、在排序数组中查找元素的第一个和最后一个位置&#xff08;力扣34&#xff09;【二分查找】五、有多少小于当…...

【NLP】自动化计算文本文件TTR的bash脚本

自动化计算文本文件TTR的bash脚本 简介 这是一个可以计算文本文件TTR的bash脚本&#xff0c;文件名为&#xff1a;calculate_TTR.sh。它会接收一个文件名作为参数&#xff0c;并输出总单词数、特异单词数和TTR。 TTR是什么 TTR&#xff08;Type-Token Ratio&#xff09;是用…...

蓝桥杯单片机组省赛十二届第一场(关于矩阵,温度ds18b20,时间ds1302的学习,以及继电器等外设的综合利用)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录一、该题目如下二、使用步骤1.矩阵键盘实现2.温度传感器ds18b20的实现总结提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、该题目如下 分…...

Ubuntu 新人上手 Microk8s 指南

文章目录1. 什么是 Ubuntu 核心2. 什么是 Kubernetes3. 什么是MicroK8s4. 为什么选择 Microk8s on Core5. 安装Ubuntu Core6. Ubuntu Core上安装 MicroK8S7. 启动 Microk8s8. 启用必要的 MicroK8s 插件9. 部署示例容器工作负载10. 检查部署状态并访问您的应用程序11. 管理镜像1…...

初阶C语言——实用调试技巧【详解】

文章目录1. 什么是bug&#xff1f;2. 调试是什么&#xff1f;有多重要&#xff1f;2.1 调试是什么&#xff1f;2.2 调试的基本步骤2.3 Debug和Release的介绍3.学会使用快捷键4.调试的时候查看程序当前信息4.1 查看临时变量的值4.2 查看内存信息4.3 查看调用堆栈4.4 查看汇编信息…...

Android 绘图基础:Canvas画布——自定义View基础(绘制表盘、矩形、圆形、弧、渐变)

Canvas画布&#xff0c;通过它我们可以自定义一个View&#xff0c;设置View的相关效果之类的。感觉用法差不多&#xff0c;重要的是要理解方法中传入的参数的含义&#xff0c;比如float类型的参数&#xff0c;传递的是坐标,已开是没有注意传入的参数时坐标&#xff0c;导致我迷…...

LeagueAkari英雄联盟自动化工具终极使用指南:本地化智能助手全面解析

LeagueAkari英雄联盟自动化工具终极使用指南&#xff1a;本地化智能助手全面解析 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾为英…...

别再死记硬背了!用Python+Graphviz把离散数学的图论和关系画出来(附代码)

用PythonGraphviz将离散数学中的抽象概念可视化 离散数学是计算机科学的基础课程之一&#xff0c;但其中的图论、二元关系等概念往往因为高度抽象而让学习者感到困惑。传统的死记硬背方式不仅效率低下&#xff0c;也难以真正理解这些概念的本质。本文将介绍如何利用Python的net…...

从日偏食图像处理开始:手把手在VS2019里跑通你的第一个OpenCV 4.3程序

从日偏食图像处理开始&#xff1a;手把手在VS2019里跑通你的第一个OpenCV 4.3程序 当那张日偏食照片第一次在屏幕上成功显示时&#xff0c;仿佛打开了计算机视觉的大门。本文将带你从零开始&#xff0c;用VS2019和OpenCV 4.3实现这个充满仪式感的"Hello World"——不…...

99%人开发Agent的致命误区!6大避坑指南助你从“调参怪”变“落地王”

本文揭示了开发Agent最常见的认知陷阱——将模型能力等同于系统能力&#xff0c;并提供了6大避坑指南&#xff1a;1. 掌握四层架构&#xff08;Persona、CoT、Skill、MCP&#xff09;&#xff1b;2. 选择合适的执行模型&#xff08;ReAct、Plan-and-Execute、Reflection&#x…...

如何通过HS2-HF Patch解锁《Honey Select 2》的完整创作潜力:从新手到专家的终极指南

如何通过HS2-HF Patch解锁《Honey Select 2》的完整创作潜力&#xff1a;从新手到专家的终极指南 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为《Honey…...

开源工具any2card:任意格式内容智能转换结构化卡片实战指南

1. 项目概述&#xff1a;从“任意格式”到“卡片”的智能转换革命最近在折腾个人知识库和内容管理时&#xff0c;我遇到了一个老生常谈但又无比棘手的问题&#xff1a;信息格式的碎片化。我的资料散落在各处&#xff0c;有PDF论文、网页文章、TXT笔记、甚至是一些图片里的文字。…...

从零到一:手把手教你为Nachos实现Exec和Exit系统调用(附完整代码与调试技巧)

从零构建Nachos系统调用&#xff1a;Exec与Exit的深度实现指南 1. 系统调用实现基础 在操作系统中&#xff0c;系统调用是用户程序与内核交互的唯一途径。Nachos作为一个教学用操作系统框架&#xff0c;其系统调用机制模拟了真实操作系统的核心设计思想。 寄存器交互机制是系统…...

哪个降AI软件好?2026年4款主流降AI工具按场景对位横评!

哪个降AI软件好&#xff1f;2026年4款主流降AI工具按场景对位横评&#xff01; 「哪个降 AI 软件好」没有标准答案。学生最常踩的坑是把这个问题简化成「哪款最便宜」或者「哪款最有效」——其实好不好用看你的场景。学校送知网严标准、送维普重灾区、自媒体被判 AI、本科双重问…...

从零到精通Gemini Deep Research:手把手带跑通生物医药/法律/金融三大垂直领域真实案例

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Gemini Deep Research功能概览与核心价值 Gemini Deep Research 是 Google 推出的面向专业研究者的增强型推理能力模块&#xff0c;专为处理长上下文、跨文档溯源、多跳逻辑推演与学术可信验证而设计。…...

Python 爬虫反爬突破:流量指纹伪装规避流量监测

前言 在爬虫反爬对抗体系中&#xff0c;IP 封禁、UA 伪造、验证码拦截属于表层防护&#xff0c;而流量指纹监测是现阶段大中型互联网平台、资讯门户、电商业务系统采用的高阶反爬手段。服务端与网关防火墙会基于全网流量行为、报文特征、连接握手规则、请求时序模型、协议栈特…...