LeetCode 071 Simplify Path

本文介绍了一个使用栈数据结构实现的简化Linux路径字符串的算法。该算法能够处理多种特殊情况,如多个连续的斜杠符号和相对路径标记..。通过逐字符扫描输入字符串并运用栈进行辅助处理,实现了路径的有效简化。
摘要由CSDN通过智能技术生成
题目


按照linux的方式简化 路径字符串

代码


public class Solution {
    public String simplifyPath(String path) {
        if(path == null){
            return null;
        }
        LinkedList<String> stack =new LinkedList<String>();
        
        String temp = new String();
        int i =0;
        int n = path.length();
        while(i<n){
            if(path.charAt(i)!='/')
            		break;
            i++;
        }
        
        while(i<n){
            char cur = path.charAt(i);
            if(cur!='/'){
                temp+=cur;
            }
            else{
                if(temp.equals("..")){
                    if(!stack.isEmpty()){
                            stack.pop();
                    }
                }
                else if(temp.length()>0 && !temp.equals(".")){
                    stack.push(new String(temp));
                }
                temp = new String();
            }
            i++;
        }
        
        if(temp.length()>0){
            if(temp.equals("..")){
                    if(!stack.isEmpty()){
                            stack.pop();
                    }
            }
            else if(!temp.equals(".")){
                stack.push(new String(temp));
            }
        }
        
        StringBuffer ans = new StringBuffer();
        while(!stack.isEmpty()){
            StringBuffer sb = new StringBuffer(stack.pop()).reverse();
            ans= ans.append(sb).append("/");
        }
        if(ans.length()==0){
        	return "/";
        }
        return new String(ans.reverse());
    }
}

思路


1 考虑用栈来做

2 注意corner,比如 .. . ///

3 可以用split()来简化写法。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值