leetcode 71. Simplify Path(Unix下简化路径)

算法思路:
首先设置一个String类型的栈。用spilt方法,对path进行分割,以“/”为分隔符分割得到一组字符串。接着遍历这组字符串,遇到空字符串(“”)和当前目录(".")跳过,若字符串为".."且栈不为空时弹栈,若字符串为".."且栈为空则跳过,其他情况则将元素压栈(if…else if…else…)。最后将栈中的元素和"/"按顺序组合成一条有效路径,当路径为空时,返回根目录,否则返回路径。

该算法时间复杂度O(n),空间复杂度(n)。参考代码:

//leetcode 71. Simplify Path
    public static String simplifyPath(String path) {
    	Stack<String> stack = new Stack<String>();
        String[] tokens = path.split("/");
        for(int i=0;i<tokens.length;i++){
        	if(tokens[i].equals("")||tokens[i].equals("."))
        		continue;
        	if(tokens[i].equals("..")&&!stack.isEmpty()){
        		stack.pop();
        	}else if(tokens[i].equals("..")&&stack.isEmpty()){
        		continue;
        	}else{
        		stack.push(tokens[i]);
        	}
        }
        StringBuilder s = new StringBuilder("");
        while(!stack.isEmpty()){
        	String str = "/"+stack.pop();
        	s.insert(0, str);
        }
        if(s.length()==0)
        	return "/";
    	return s.toString();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值