首页 > 试题广场 >

简化目录路径

[编程题]简化目录路径
  • 热度指数:777 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个目录路径的字符串path,path由英文字母,数字,".","/" 或 "_"组成,表示指向某一个文件或者目录的绝对路径,但是有的路径会有复杂的表达,比如"/../"其实还是代表的根目录路径"/"请你将这个绝对路径转化为一个更加简洁的规范路径,转化规则如下:
1.将1个点"."表示当前目录本身,即"/a/b/./"=>表示的还是"/a/b"
2.将2个点".."表示将目前切换到上一级,即"/a/b/../"其实表示的是"/a"
3.其他数目的点或者点加上其他字符视为一个普通目录路径,比如"/.../a.."表示的是根目下有一个名字为"..."的目录文件,"..."的文件下面还有一个名字为"a.."的文件
4.任意多个连续的斜杠都被视为单个斜杠,即 "///"和"//"都被视为"/"

你返回的简化规范路径应该如下:
5.始终以斜杠 '/' 开头
6.两个目录名之间必须只有一个斜杠 '/'
7.最后一个目录名不能 '/' 结尾,根目录除外,根目录只有一个"/"
8.路径仅包含从根目录到目标文件或目录的路径上的目录,即除了"."和".."的东西应该简化,其余的普通字符应该保留下来,视为目录路径


数据范围:
示例1

输入

"/home/web/"

输出

"/home/web"
示例2

输入

"/home////web//"

输出

"/home/web"

说明

在简化规范路径中,多个连续的"/"替换为"/", 
示例3

输入

"/../"

输出

"/"

说明

"/"是根目录,是顶级目录,它的上级目录还是自己 
示例4

输入

"/home/web/./tang/../miao/"

输出

"/home/web/miao"

说明

"/home/web/./"表示的是"/home/web",因为"."表示当前目录,但是"/home/web/./tang/../"表示的还是"/home/web",因为".."表示父目录,"/home/web/tang"的父目录就是"/home/web" 
importjava.util.*;
 
 
publicclassSolution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param path string字符串
     * @return string字符串
     */
    publicString simplifyPath (String path) {
        // write code here
        String[] strs = path.split("/");
        Stack<String> stack =newStack<>();
        for(String str: strs) {
            if(str.equals("..")) {
                if(!stack.isEmpty()) {
                    stack.pop();
                }
            }
            elseif(!(str.equals(".") || str.equals(""))) {
                stack.push(str);
            }
        }
        String res ="";
        while(!stack.isEmpty()) {
            res ="/"+ stack.pop() + res;
        }
        returnres.length() ==0?"/": res;
    }
}
发表于 2022-07-12 16:20:56 回复(0)