您的位置:首页 > 其它

leetCode 71.Simplify Path(化简路径) 解题思路和方法

2015-07-17 16:45 381 查看
Simplify Path

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".

思路:此题是有些坑爹的,原因就是...的类型也算合法,其路径格式不是windows,是Linux的,对于Linux小白来说,路径还是不好考虑的。

在解的过程中,如果是对字符遍历将会有些麻烦,最简单的办法就是对字符串按“/”分割数组,然后按情况操作。具体代码如下:

public class Solution {
public String simplifyPath(String path) {
//将//都简化成/
path = path.replaceAll("/{2,}","/");
System.out.println(path);
Stack<String> st = new Stack<String>();
//按/分割数组
String[] p = path.split("/");
for(int i = 0; i < p.length; i++){
//..表示后退一个路径
if(p[i].equals("..")){
if(!st.isEmpty())//不为空才后退
st.pop();
}
//.忽视,表示当前路径
else if(!p[i].equals(".") ){
st.push(p[i]);
}
}
//现在栈里的就是简化的路径
String s = "";
while(!st.isEmpty()){
s = "/" + st.pop() + s;//先进后出
}
s = "/" + s;//补上开头的/
if(s.length() > 1)
s = s.replaceAll("/$","").replaceAll("/{1,}", "/");//去除结尾的/
return s;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: