首页 > 其他 > 详细

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

时间:2015-07-17 18:54:20      阅读:185      评论:0      收藏:0      [点我收藏+]
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;
    }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

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

原文:http://blog.csdn.net/xygy8860/article/details/46929591

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!