​LeetCode刷题实战609:在系统中查找重复文件

2023-10-30 16:59

本文主要是介绍​LeetCode刷题实战609:在系统中查找重复文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 在系统中查找重复文件,我们先来看题面:

https://leetcode.cn/problems/find-duplicate-file-in-system/

df1688414f47d29ac9c305da5baefd0a.png

给你一个目录信息列表 paths ,包括目录路径,以及该目录中的所有文件及其内容,请你按路径返回文件系统中的所有重复文件。答案可按 任意顺序 返回。

一组重复的文件至少包括 两个 具有完全相同内容的文件。

输入 列表中的单个目录信息字符串的格式如下:

"root/d1/d2/.../dm f1.txt(f1_content) f2.txt(f2_content) ... fn.txt(fn_content)"

这意味着,在目录 root/d1/d2/.../dm 下,有 n 个文件 ( f1.txt, f2.txt ... fn.txt ) 的内容分别是 ( f1_content, f2_content ... fn_content ) 。注意:n >= 1 且 m >= 0 。如果 m = 0 ,则表示该目录是根目录。

输出 是由 重复文件路径组 构成的列表。其中每个组由所有具有相同内容文件的文件路径组成。文件路径是具有下列格式的字符串:

"directory_path/file_name.txt"

示例

示例 1:输入:paths = ["root/a 1.txt(abcd) 2.txt(efgh)","root/c 3.txt(abcd)","root/c/d 4.txt(efgh)","root 4.txt(efgh)"]
输出:[["root/a/2.txt","root/c/d/4.txt","root/4.txt"],["root/a/1.txt","root/c/3.txt"]]示例 2:输入:paths = ["root/a 1.txt(abcd) 2.txt(efgh)","root/c 3.txt(abcd)","root/c/d 4.txt(efgh)"]
输出:[["root/a/2.txt","root/c/d/4.txt"],["root/a/1.txt","root/c/3.txt"]]

解题

https://blog.csdn.net/weixin_44389717/article/details/123266433

1、首先,通过字符串的split方法,以空格分割,将paths字符串分割各个values

c0c650a834c38441cffc19b9a05b8042.png

2、接着循环将各个部分提取出来,以每个文件的内容作为map的key,使用HashMap的getOrDefault(key,defaultValue)方法查询该key是否有值,如果没有则新建一个空的list为其做准备,并且接着put一个以文件内容为key,list为value的map

2ae6daf01687623dc61d43f174dda634.png

3、此时,第一次循环遍历第一个文件内容就结束了,这时以Map类型为集合的第一个内容为(“abcd”,[“root/a/1.txt”])

如此反复不断遍历,如果查询有这个key,那么就add在该key的value后面

4、新建一个List

d1996857155432ba8999e2a2604c80a1.png

5、遍历完成后,循环每一个key,如果该key的value长度大于1,则表示有重复的内容,那么将其存入新的数组

34f6d1d0e7e87811bc53a68fda9d8e6d.png

6、最后返回即可

HashMap< String, List < String >> map = new HashMap < > ();for (String path: paths) {String[] values = path.split(" ");for (int i = 1; i < values.length; i++) {String[] name_cont = values[i].split("\\(");name_cont[1] = name_cont[1].replace(")", "");List < String > list = map.getOrDefault(name_cont[1], new ArrayList < String > ());list.add(values[0] + "/" + name_cont[0]);map.put(name_cont[1], list);}}List < List < String >> res = new ArrayList< >();for (String key: map.keySet()) {if (map.get(key).size() > 1)res.add(map.get(key));}return res;

上期推文:

LeetCode1-600题汇总,希望对你有点帮助!

LeetCode刷题实战601:体育馆的人流量

LeetCode刷题实战602:好友申请 II :谁有最多的好友

LeetCode刷题实战603:连续空余座位

LeetCode刷题实战604:迭代压缩字符串

LeetCode刷题实战605:种花问题

LeetCode刷题实战606:根据二叉树创建字符串

LeetCode刷题实战607:销售员

LeetCode刷题实战608:树节点

adbf71e6e0013892ffc7a195cae5a348.png

这篇关于​LeetCode刷题实战609:在系统中查找重复文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/309347

相关文章

OpenManus本地部署实战亲测有效完全免费(最新推荐)

《OpenManus本地部署实战亲测有效完全免费(最新推荐)》文章介绍了如何在本地部署OpenManus大语言模型,包括环境搭建、LLM编程接口配置和测试步骤,本文给大家讲解的非常详细,感兴趣的朋友一... 目录1.概况2.环境搭建2.1安装miniconda或者anaconda2.2 LLM编程接口配置2

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

Java使用Tesseract-OCR实战教程

《Java使用Tesseract-OCR实战教程》本文介绍了如何在Java中使用Tesseract-OCR进行文本提取,包括Tesseract-OCR的安装、中文训练库的配置、依赖库的引入以及具体的代... 目录Java使用Tesseract-OCRTesseract-OCR安装配置中文训练库引入依赖代码实