Linux系统目录结构

Linux系统目录结构

层次:


规范路径(栈stack)

题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

Unix 风格的文件系统中:
一个点(.):当前目录本身
两个点(..):将目录切换到上一级(指向父目录)

1.必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。
2.最后一个目录名(如果存在)不能以 / 结尾。
3.必须是表示绝对路径的最短字符串。

示例 1:
输入:"/home/"
输出:"/home"
解释:注意,最后一个目录名后面没有斜杠。

示例 2:
输入:"/../"
输出:"/"
解释:从根目录向上一级是不可行的,因为根是你可以到达的最高级。

示例 3:
输入:"/home//foo/"
输出:"/home/foo"
解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。

示例 4:
输入:"/a/./b/../../c/"
输出:"/c"

示例 5:
输入:"/a/../../b/../c//.//"
输出:"/c"

示例 6:
输入:"/a//bc/d//././/.."
输出:"/a/b/c"

分析

1.主要考察的是栈,所以定义一个辅助栈Stack
2.把字符串以"/"为分隔符分割成数组,此时数组有"路径"、""、"."、".."这四种情况;
3.遍历数组
    3.1 s[i].equals("..")&&stack.isEmpty()就出栈pop();
    3.2 !s[i].equals("")&&!s[i].equals(".")&&!s[i].equals(".."),即s[i]是路径就入栈;
4.如果栈空,直接返回"/"
  如果栈非空,使用StringBuffer连接栈元素

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

public class Main{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
String s=input.next(); //输入字符串
System.out.println(simplifyPath(s)); //调用方法返回结果
}

public static String simplifyPath(String s){
int len=s.length(); //获取字符串长度
String[] str=s.split("/"); //根据/生成字符串数组
StringBuilder sb=new StringBuilder(); //最终转字符串
Stack<String> stack=new Stack<>(); //生成stack栈

for(int i=0;i<str.length;i++){
if(str[i].equals("..")&&!stack.isEmpty()){
stack.pop(); //如果是..就返回父目录 就要出栈
}else if(!str[i].equals("")&&!str[i].equals(".")&&!str[i].equals("..")){
stack.push(str[i]); //如果是路径 /abc中的abc就要入栈
}
}
if(stack.isEmpty()){
return "/"; //如果最终没有目录 就要返回/
}
for(int i=0;i<stack.size();i++){
sb.append("/"+stack.get(i)); //sb拼接即可
}
return sb.toString(); //转字符串
}

}

实现结果


×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. Linux系统目录结构
  2. 2. 规范路径(栈stack)
    1. 2.1. 题目
    2. 2.2. 分析
    3. 2.3. 代码实现
    4. 2.4. 实现结果
,