71.简化路径

给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为 更加简洁的规范路径

在 Unix 风格的文件系统中规则如下:

  • 一个点 '.' 表示当前目录本身。
  • 此外,两个点 '..' 表示将目录切换到上一级(指向父目录)。
  • 任意多个连续的斜杠(即,'//''///')都被视为单个斜杠 '/'
  • 任何其他格式的点(例如,'...''....')均被视为有效的文件/目录名称。

返回的 简化路径 必须遵循下述格式:

  • 始终以斜杠 '/' 开头。
  • 两个目录名之间必须只有一个斜杠 '/'
  • 最后一个目录名(如果存在)不能'/' 结尾。
  • 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.''..')。

返回简化后得到的 规范路径

思路

给你一组由 / 隔开的字符串(忽略空串和 .),请你从左到右遍历这些字符串,依次删除每个 .. 及其左侧的字符串(模拟返回上一级目录)。

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
package com.wereash.scut_hot100;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
* @Author: WereAsh
* @Date:2026-01-24 20:00
**/
public class Solution071 {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
String[] str=scanner.nextLine().split("/");
List<String> strList=new ArrayList<>();
for (String s:str){
if(s.isEmpty()||s.equals(".")){ //如果当前字符串为空,或者为当前文件夹,则不做操作
continue;
}
if(!s.equals("..")){ //如果当前不是回退到上一级目录,则添加当前文件夹
strList.add(s);
} else if (!strList.isEmpty()) { //如果是..判断是否为根目录,不是根目录则回退到上一级目录
strList.remove(strList.size()-1);
}
}
System.out.println("/"+String.join("/",strList));
}
}