LeetCode:简化路径【71】

题解参考天码营:https://www.tianmaying.com/tutorial/LC71

题目描述

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

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

边界情况:

    • 你是否考虑了 路径 = "/../" 的情况?
      在这种情况下,你需返回 "/" 。
    • 此外,路径中也可能包含多个斜杠 '/' ,如 "/home//foo/" 。
      在这种情况下,你可忽略多余的斜杠,返回 "/home/foo" 。

题目分析

  对于这道题目来说,最为关键的算法就是如何处理".."对于之前路径的“退回”操作。不难发现,每次“退回”的都是当前路径中的最后一个“文件夹”,每次进入的文件夹也都会出现在路径的最后。这样的一个“从一段添加或者删除”的模式恰恰就是的定义。

  当我们知道要使用栈结构以后,还有几个坑需要注意:

  • ""和"."都是不需要处理的
  • /,//,///,只要是连续的斜线都是/
  • 在根目录是使用".."是无法退后的,这TMD巨坑,结合实际了!  

  我们处理的步骤是如下:

  • 如果当前段是..,则看stack中是否有元素,如果有,删除最后一个
  • 如果当前段是.或者,则不做任何处理
  • 否则将当前段加入到stack的末尾

  这样,在处理完所有段之后,我们就可以确保仍然在stack中的就是最简单的路径字符串了,这个时候,我们只需要使用/将他们拼接成答案即可。

Java题解

class Solution {
public String simplifyPath(String path) {
Stack<String> stringStack = new Stack<>();
String[] arr = path.split("/");
for(String str:arr)
{
if(str.equals("")||str.equals("."))
continue;
if(str.equals("..")) {
if(!stringStack.empty())
stringStack.pop();
}
else
stringStack.push(str);
} String ans = "";
while (!stringStack.empty())
{
ans="/"+stringStack.pop()+ans;
}
if(ans.equals(""))
return "/";
return ans;
}
}

  

LeetCode:简化路径【71】的更多相关文章

  1. LeetCode 简化路径(探索字节跳动)

    题目描述 给定一个文档 (Unix-style) 的完全路径,请进行路径简化. 例如, path = "/home/", => "/home" path ...

  2. LeetCode 71.简化路径

    LeetCode 71.简化路径 题目描述: 以 Unix 风格给出一个文件的绝对路径,你需要简化它.或者换句话说,将其转换为规范路径.在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此 ...

  3. Java实现 LeetCode 71 简化路径

    71. 简化路径 以 Unix 风格给出一个文件的绝对路径,你需要简化它.或者换句话说,将其转换为规范路径. 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此外,两个点 (-) 表示将 ...

  4. LeetCode OJ:Simplify Path(简化路径)

    Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", ...

  5. LeetCode No.70,71,72

    No.70 ClimbStairs 爬楼梯 题目 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. ...

  6. lintcode 中等题:Simplify Path 简化路径

    题目 简化路径 给定一个文档(Unix-style)的完全路径,请进行路径简化. 样例 "/home/", => "/home" "/a/./b ...

  7. LeetCode:路径总和II【113】

    LeetCode:路径总和II[113] 题目描述 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例:给定如下二叉树, ...

  8. LeetCode:路径总和【112】

    LeetCode:路径总和[112] 题目描述 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例 ...

  9. Leetcode 不同路径系列

    Leetcode不同路径系列题解笔记 62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 "Start" ). 机器人每次只能向下或者向右移动一 ...

随机推荐

  1. git 工作模式

    个人在学习Git工作流的过程中,从原有的 SVN 模式很难完全理解Git的协作模式,直到有一天我看到了下面的文章,好多遗留在心中的困惑迎刃而解: 我们以使用SVN的工作流来使用Git有什么不妥? Gi ...

  2. git branch --set-upstream hmyq/master master

    git branch --set-upstream hmyq/master master

  3. Buffer ByteBuffer 缓冲区

    http://blog.sina.com.cn/s/blog_4150f50c0100gfa3.html

  4. 《Windows游戏编程大师技巧》学习笔记——关于创建显示表面

    1.如你所知,显示在屏幕上的图像仅仅只是是以某种格式存储在内存中的有色像素组成的矩阵.或是调色板化的或是RGB模式的.在不论什么一种情况下.要想做点什么你都必须知道如何绘制图到内存中,然而Direct ...

  5. 边缘检测算子和小波变换提取图像边缘【matlab】

    Roberts边缘检测算子:根据一对互相垂直方向上的差分可用来计算梯度的原理,采用对角线方向相邻两像素之差. 小波变换的方法比较适用于展现夹带在正常信号中的瞬间反常现象,具有方向敏感性.所以可以边缘检 ...

  6. Docker入门与应用系列(九)图形界面管理之Portainer

    介绍 Portainer是一个开源.轻量级Docker管理用户界面,基于Docker API,可管理Docker主机或Swarm集群,支持最新版Docker和Swarm模式.官方文档https://p ...

  7. Domino移动Web上传的附件到RichText域

    只是从网上拷贝下来,没有测试. 得到上传文件的路径http://searchdomino.techtarget.com/tip/Trap-an-attachment-path-via-the-Domi ...

  8. Dubbo基础篇-zookeeper安装(单点)

    安装步骤: 一首先安装jdk环境 二 安装zookeeper   在centos虚拟机192.168.23.131中安装zookeeper: 1 修改操作系统/etc/hosts 文件中的配置: # ...

  9. java如何计算两个经纬度之间的距离?

    /*计算两个经纬度之间的距离 结果单位:米 */public static double getDistance(String lat1Str, String lng1Str, String lat2 ...

  10. jpa双向一对多关联映射

    表结构 Room类 package auth.model; import java.util.HashSet; import java.util.Set; import javax.persisten ...