Java实现 洛谷 P1738 洛谷的文件夹
题目描述
kkksc03是个非凡的空想家!在短时间内他设想了大量网页,然后总是交给可怜的lzn去实现。
洛谷的网页端,有很多文件夹,文件夹还套着文件夹。
例如:/luogu/application/controller表示根目录下有一个名称为luogu的文件夹,这个文件夹下有一个名称application的文件夹,其中还有名为controller的文件夹。
每个路径的第1个字符总是’/’,且没有两个连续的’/’,最后的字符不是’/’。所有名称仅包含数字和小写字母。
目前根目录是空的。kkksc03想好了很多应该有的文件夹路径名。问题是,需要是使这些文件夹都存在,需要新建几个文件夹呢?
输入输出格式
输入格式:
输入文件第1行为一个正整数N。
接下来N行,每行为一个描述路径的字符串,长度均不超过100。
输出格式:
输出应包含N行,每行1个正整数,第i行输出若要使第1个路径到第i个路径存在,最少需要新建多少个文件夹。
输入样例#1:
2
/luogu/application/controller
/luogu/application/view
输出样例#1:
3
4
输入样例#2:
3
/chicken
/chicken/egg
/chicken
输出样例#2:
1
2
2
输入样例#3:
4
/a
/a/b
/a/c
/b/b
输出样例#3:
1
2
3
5
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class 洛谷的文件夹 {
public static void main(String[] args) {
int count=0; //计算新建文件夹次数
Scanner sc =new Scanner(System.in);
ArrayList<String> list = new ArrayList<String>();
ArrayList<String> list1 = new ArrayList<String>();
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
String s = sc.next();
list.add(s); //把每一个路径都保存为String放入list里面
}
Collections.sort(list); //把这些路径按照字典序排序
//排完序就会把相同路径或者相似路径的放在一起 可以比对这一个和下一个的不同来计算
//不用再去记录以前建过的文件夹
String sss = list.get(0);
String [] num3 = sss.substring(1).split("/");
for (int i = 0; i < num3.length; i++) {
list1.add(num3[i]);
count++;
} //先把第一个保存下来
for (int i = 0; i <list.size()-1; i++) {
System.out.println(count);
String s = list.get(i);
String ss = list.get(i+1);
String [] num1 = s.substring(1).split("/"); //这里是为了拆分使用,来匹配相对位置的文件夹是不是被建过
String [] num2 = ss.substring(1).split("/");
int min = Math.min(num1.length, num2.length);//保存最小长度的
int temp=-1; //这里是用第一个当基础来与第二个的比较
if(num1.length<num2.length){ //如果第二个长度大,就先保存一下
temp=num1.length;
}
for (int j = 0; j < min; j++) {
if (num1[j].equals(num2[j])) { //第一个相同
if (!list1.contains(num1[j])) { // list1 这里是list1 看看是否有这个文件夹
count++; //这里主要是 看看这两个路径里有几个相同的 防止加上相同的文件夹
list1.add(num1[j]); //没有就加上这个文件夹 count记录次数
}
}
else { //如果这两个不相等
temp=j; //就保存下标 结束掉
break;
}
}
if (temp!=-1) { //如果有不相同的 或者第二个数组长的
list1 = new ArrayList<String>(); //list清空 重新录入
for (int j = 0; j < num2.length; j++) { //前面第一个已经录好了 这里录入第二个
list1.add(num2[j]);
if(j>=temp){ //当录入到下标的地方,就开始添加次数
count++;
}
}
}
}
System.out.println(count);
}
}
Java实现 洛谷 P1738 洛谷的文件夹的更多相关文章
- java 弹出选择目录框(选择文件夹),获取选择的文件夹路径
java 弹出选择目录框(选择文件夹),获取选择的文件夹路径 java 弹出选择目录框(选择文件夹),获取选择的文件夹路径:int result = 0;File file = null;String ...
- Java中的JAR/EAR/WAR包的文件夹结构说明(转)
JAR包:打成JAR包的代码,一般作为工具类,在项目中,会应用到N多JAR工具包. WAR包:JAVA WEB工程,都是打成WAR包,进行发布,如果我们的服务器选择TOMCAT等轻量级服务器,一般就打 ...
- 洛谷P1738 洛谷的文件夹
原题目:点我 题目是一个略水的题,我机制地用面向对象做了...所以代码量急剧加大,100行233 模拟即可,字符串处理麻烦点.如果没有找到子文件夹就新建文件夹,如果有就进入该文件夹. 提示:高能,指针 ...
- Java生成文件夹
Java生成文件夹 1.说明 判断文件夹是否存在,如果不存在就创建该文件夹,并打印其路径:如果存在,打印其路径 2.实现源码 /** * @Title:BuildFolder.java * @Pack ...
- Java NIO.2 使用Files类遍历文件夹
在以前的Java版本中,如果要遍历某个文件夹下所有的子文件.子文件夹,需要我们自己写递归,很麻烦. 在Java7以后,我们可以NIO.2中的Files工具类来遍历某个文件夹(会自动递归). 大致用法: ...
- java删除文件夹及子目录
package test; import java.io.FileNotFoundException; import java.io.IOException; import java.io.File; ...
- 代码实现:从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名
package com.loaderman.test; import java.io.File; import java.io.FileReader; import java.util.Scanner ...
- 2021.08.05 P1738 洛谷的文件夹(树形结构)
2021.08.05 P1738 洛谷的文件夹(树形结构) P1738 洛谷的文件夹 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树!! 题意: 给出n个网页路径,求 ...
- Luogu P1738 洛谷的文件夹
P1738 Luogu 发一个链表题解! 仅有24ms,排名第一哦~ 圆圈代表点,每个店有两个指针,一个指向自己兄弟(同级文件夹),另一个指向自己孩子(子文件夹),还有一个保存当前名字. 有点像二叉树 ...
随机推荐
- 一道题带你搞定Python函数中形参和实参问题
昨天在Python学习群里有位路人甲问了个Python函数中关于形参和实参一个很基础的问题,虽然很基础,但是对于很多小白来说不一定简单,反而会被搞得稀里糊涂.人生苦短,我用Python. 为了解答大家 ...
- SDWebImage 原理及使用问题
SDWebImage托管在github上.https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下 ...
- react 动态渲染echarts折线图,鼠标放大缩小
//折线图组件import React,{Component} from 'react'; import ReactEcharts from 'echarts-for-react'; class Ec ...
- .net core 3.1 使用nlog记录日志 NLog.Web.AspNetCore
背景 .net core 中已经集成了log的方法, 但是只能控制台输出不能写入文件等等. 常见第三方的的日志工具包括log4net, nlog等等, 本文介绍nlog 一. 引用程序集, nuget ...
- 汇编语言 简单的Hello World
DATA SEGMENT STRING DB 'Hello World!','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV ...
- Kali Linux 2020.1安装以及安装后要做的事
Kali Linux是基于Debian的Linux发行版,预装了许多渗透测试软件,让大家从各种繁琐的软件安装中解脱出来,专注于测试本身. 本文章介绍了如何安装目前最新的2020.1版本,以及安装好后补 ...
- python3.x 基础一:str字符串方法
*字符串不能更改值 数据类型字符串str | capitalize(...) 返回字符串中第一个字母大写 | S.capitalize() -> str | | ...
- Jenkins-插件开发-BUG-Messages类编译报错
注意:下载Jenkins插件源码后报错Messages这个类怎么导包都报编译错误的问题! 今天从GitHub下载了Jenkins的一些插件源码,准备自己研究研究写个插件.但是发现每个源码中都存在一个编 ...
- JavaScript基础技术总结
javascript的作用 HTML网页运行在浏览器端,与用户没有交互功能,用户访问网页的时候只能看,如果网页没有程序员去更新,永远是一成不变的.JavaScript就是可以让程序运行在网页上,提高客 ...
- BZOJ1017 树形DP
1017: [JSOI2008]魔兽地图DotR Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 2308 Solved: 919[Submit][S ...