版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/majichen95/article/details/89221139
给定一个文件的绝对路径(Unix-style),请进行路径简化。
Unix中, .
表示当前目录, ..
表示父目录。
结果必须以 /
开头,并且两个目录名之间有且只有一个 /
。最后一个目录名(如果存在)后不能出现 /
。你需要保证结果是正确表示路径的最短的字符串。
样例
样例 1:
输入: "/home/"
输出: "/home"
样例 2:
输入: "/a/./../../c/"
输出: "/c"
解释: "/" 没有上级目录, "/../" 的结果就是 "/".
注意事项
-
你是否考虑了 路径为
"/../"
的情况?在这种情况下,你需返回
"/"
。 -
此外,路径中也可能包含双斜杠
'/'
,如"/home//foo/"
。在这种情况下,应该忽略多余的斜杠,返回
"/home/foo"
。
解题思路:
使用 stack 来解题。注意正则表达式 + 表示匹配前一个字符一个或多个,* 表示匹配前一个字符0个或多个,?表示匹配前一个字符0个或一个。
unix指令 . 留在当前文件夹, .. 返回上一级, 如果是string的话就进入子文件夹,stack的顶部代表当前所处的文件夹
遇到.. pop, 遇到string push, 其余情况不用管
最后把所得到的stack 反着拼接即可
最后要考虑所处在根目录下要有个"/"
public class Solution {
/**
* @param path: the original path
* @return: the simplified path
*/
public String simplifyPath(String path) {
// write your code here
String[] strs = path.split("/+");
Stack<String> stack = new Stack<String>();
for(String str: strs){
if(!str.equals("..") && !str.equals(".") && !str.equals(""))
stack.push(str);
if(str.equals("..") && !stack.isEmpty())
stack.pop();
}
StringBuilder sb = new StringBuilder();
while(!stack.isEmpty()){
sb.insert(0, stack.pop());
sb.insert(0, "/");
}
String res = sb.toString();
if(res.equals(""))
return "/";
return res;
}
}