您的位置:首页

[leetcode]Simplify Path

2018-02-05 14:45 288 查看

问题描写叙述:

Given an absolute path for a file (Unix-style), simplify it.

For example,
path =
"/home/"
, =>
"/home"

path =
"/a/./b/../../c/"
, =>
"/c"


click to show corner cases.

Corner Cases:
Did you consider the case where path =
"/../"
?

In this case, you should return
"/"
.
Another corner case is the path might contain multiple slashes
'/'
together, such as
"/home//foo/"
.

In this case, you should ignore redundant slashes and return
"/home/foo"
.


基本思想:

此题能够用一个堆栈存储每层目录或文件。假设两个/之间的内容是".."就弹出栈顶元素。假设遇到“.”或“”就不变。基本思想就是这样。

但要考虑一些corner case。如“/../”,"///"等

代码:

public String simplifyPath(String path) {  //Java
// return "/";
path = path.trim();
if(path.equals("/"))
return "/";

List<String> stack = new LinkedList<String>();

int top = -1;
String tmp = path;
while(!tmp.equals("")){
if(tmp.startsWith("/"))
tmp = tmp.substring(1);
if(tmp.equals(""))
break;

if(tmp.contains("/")){
int pos = tmp.indexOf("/");
String file = tmp.substring(0,pos);
tmp = tmp.substring(pos);
if(file.equals(".")|| file.equals(""))
continue;
if(file.equals("..")){
if(top>-1)
top--;
continue;
}
stack.add(++top,file);

}
else {
String file = tmp;
tmp = "";
if(file.equals("."))
continue;
if(file.equals("..")){
if(top>-1)
top--;
continue;
}
stack.add(++top,file);

}
}
//generate path;
String rpath = "/";
for(int i = 0; i <=top ; i++)
rpath += stack.get(i)+"/";
if(top >=0)
rpath = rpath.substring(0,rpath.length()-1);
return rpath;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: