栈的运用题

给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。

在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。

请注意,返回的 规范路径 必须遵循下述格式:

始终以斜杠 '/' 开头。
两个目录名之间必须只有一个斜杠 '/' 。
最后一个目录名(如果存在)不能 以 '/' 结尾。
此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.' 或 '..')。
返回简化后得到的 规范路径 。

来源:力扣(LeetCode)
 

这道题是一道栈的运用题

栈的定义是先进后出,需要压栈,这里去想的是一种是".."为返回上一级,这个时候需要的是把最后面的文件抛出,这样就返回上一个文件了~~

class Solution {

    public String simplifyPath(String path) {

String[] names=path.split("/");//用单斜杠进行分割

Deque<String>stack=new ArrayDeque<String>();  //设置栈

for(String name:names){  //将名字进行遍历

    if("..".equals(name)){   //需要判断名字是否为..,这时需要看栈是否为空,如果不为空,则抛出最后的那个文件名称

    if(!stack.isEmpty()){//判断不为空

        stack.pollLast();//删除最后一个元素

    }

}else if(name.length()>0&&!".".equals(name)){//如果添加的name大于零,且不等于"."

    stack.offerLast(name);//将元素加入栈

}

    }

    StringBuffer ans=new StringBuffer();//字符串创建

    if(stack.isEmpty()){ 

        ans.append('/');//如果为空,字符串为"/"

    }else{

        while(!stack.isEmpty()){

            ans.append('/');

            ans.append(stack.pollFirst());//如果不为空,从栈头开始添加到字符串里

        }

    }

    return ans.toString();//字符串读取

}}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值