题目描述

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 洛谷的文件夹的更多相关文章

  1. java 弹出选择目录框(选择文件夹),获取选择的文件夹路径

    java 弹出选择目录框(选择文件夹),获取选择的文件夹路径 java 弹出选择目录框(选择文件夹),获取选择的文件夹路径:int result = 0;File file = null;String ...

  2. Java中的JAR/EAR/WAR包的文件夹结构说明(转)

    JAR包:打成JAR包的代码,一般作为工具类,在项目中,会应用到N多JAR工具包. WAR包:JAVA WEB工程,都是打成WAR包,进行发布,如果我们的服务器选择TOMCAT等轻量级服务器,一般就打 ...

  3. 洛谷P1738 洛谷的文件夹

    原题目:点我 题目是一个略水的题,我机制地用面向对象做了...所以代码量急剧加大,100行233 模拟即可,字符串处理麻烦点.如果没有找到子文件夹就新建文件夹,如果有就进入该文件夹. 提示:高能,指针 ...

  4. Java生成文件夹

    Java生成文件夹 1.说明 判断文件夹是否存在,如果不存在就创建该文件夹,并打印其路径:如果存在,打印其路径 2.实现源码 /** * @Title:BuildFolder.java * @Pack ...

  5. Java NIO.2 使用Files类遍历文件夹

    在以前的Java版本中,如果要遍历某个文件夹下所有的子文件.子文件夹,需要我们自己写递归,很麻烦. 在Java7以后,我们可以NIO.2中的Files工具类来遍历某个文件夹(会自动递归). 大致用法: ...

  6. java删除文件夹及子目录

    package test; import java.io.FileNotFoundException; import java.io.IOException; import java.io.File; ...

  7. 代码实现:从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名

    package com.loaderman.test; import java.io.File; import java.io.FileReader; import java.util.Scanner ...

  8. 2021.08.05 P1738 洛谷的文件夹(树形结构)

    2021.08.05 P1738 洛谷的文件夹(树形结构) P1738 洛谷的文件夹 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.树!! 题意: 给出n个网页路径,求 ...

  9. Luogu P1738 洛谷的文件夹

    P1738 Luogu 发一个链表题解! 仅有24ms,排名第一哦~ 圆圈代表点,每个店有两个指针,一个指向自己兄弟(同级文件夹),另一个指向自己孩子(子文件夹),还有一个保存当前名字. 有点像二叉树 ...

随机推荐

  1. 画结构图的神器 Graphviz

    经常看到别人的论文里各种优美的图,没想过它们是怎么来的,前两天也是在看论文的时候被推荐了一款画图软件graphviz,稍微了解了一下这个画图软件,据说是贝尔实验室的几位牛人开发出来的,试了一下觉得很不 ...

  2. [csu1605]数独(精确覆盖问题)

    题意 :给定数独的某些初始值,规定每个格子的得分,求得分最大的数独的解. 思路:这是某年的noip的原题,高中时就写过,位运算也就是那个时候学会的--.这题明显是暴搜,但是需要注意两点,一是需要加一些 ...

  3. iview tree 绑定数据

    官方文档 :https://www.iviewui.com/components/tree 效果图 1 主体分析 <Tree ref="tree" :data="t ...

  4. 2018-06-20 js字符串函数

    str.length -> 字符串长度; str.indexOf() -> 从左边查找字符串中某字符的位置: str.lastIndexOf -> 从右边查找字符串中某字符的位置: ...

  5. python-修改文件

    1.修改文件1 # fw = open('username','w')# fw.write('hhhh')# fw.flush()  #强制把缓冲区里面的数据写到磁盘上1.简单粗暴直接#  1.打开一 ...

  6. Spring Cloud 系列之 Consul 配置中心

    前面我们已经学习过 Spring Cloud Config 了: Spring Cloud 系列之 Config 配置中心(一) Spring Cloud 系列之 Config 配置中心(二) Spr ...

  7. hadoop与spark的处理技巧(一)Top N处理技巧

    1.MR的topN处理方案,假设所有输入Key都唯一 2.MR的topN处理方案,假设输入Key不唯一 3.spark的topN处理方案,假设所有输入Key都唯一,不使用top()和takeOrder ...

  8. POJ3903 Stock Exchange LIS最长上升子序列

    POJ3903 Stock Exchange #include <iostream> #include <cstdio> #include <vector> #in ...

  9. JS如何判断是否已经引入某个css或是js?

    http://bbs.csdn.net/topics/390541081 function isInclude(name){     var js= /js$/i.test(name);     va ...

  10. centos8.0安装docker & docker-compose

    centos8.0安装docker&docker-compose 背景简介: 现在centos已经到了8 ,一直在接触容器方面,为了尝鲜,下载了CentOS8,并尝试安装docker& ...