LeetCode-71.简化路径(相关话题:栈)

117 篇文章 0 订阅

给定一个文档 (Unix-style) 的完全路径,请进行路径简化。

例如,

path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"

边界情况:

  • 你是否考虑了 路径 = "/../" 的情况?

    在这种情况下,你需返回 "/" 。

  • 此外,路径中也可能包含多个斜杠 '/' ,如 "/home//foo/" 。

    在这种情况下,你可忽略多余的斜杠,返回 "/home/foo" 。

解题思路:

先解释一下给定的字符串中,除路径分隔符"/"外,可能出现的字符串

  • 正常路径文件名
  • "."-表示当前目录,因此可忽略
  • ".."-表示上层目录,因此需退到上一层,可用栈实现

主要思路:用路径分隔符"/"分割所给路径,遍历分割之后的字符串数组

  • 遇到空字符串或者".",跳过
  • 遇到"..",则将栈顶元素弹出(若栈不为空)
  • 否则为正常路径文件名,入栈

遍历完成后,若栈为空,则返回根目录"/",否则将栈中元素用路径分隔符"/"分割组成路径返回。

java代码:

class Solution {
    public String simplifyPath(String path) {
        if(null == path || 0 == path.length())
            return "/";
        String[] dir = path.split("/");
        Stack<String> stack = new Stack<String>();
        for(int i = 0; i < dir.length; i++) {
            if(".".equals(dir[i]) || "".equals(dir[i]))
                continue;
            if("..".equals(dir[i])) {
                if(!stack.empty())
                    stack.pop();
                continue;
            }
            stack.push(dir[i]);
        }
        String res = "";
        while(!stack.empty())
            res = "/" + stack.pop() + res;
        return res.length() == 0 ? "/" : res.toString();
    }
}
weixin028基于微信小程序小说阅读器设计+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值