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

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;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值