【LeetCode】71. 简化路径

深碍√TFBOYSˉ_ 2022-05-08 09:40 366阅读 0赞

题目链接:https://leetcode-cn.com/problems/simplify-path/description/

题目描述

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

例如,
path = “/home/”, => “/home”
path = “/a/./b/…/…/c/”, => “/c”

边界情况:

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

解决方法

用栈操作。首先按照“/”将地址进行分割,对分割出的子串进行不同的操作:
1、如果是空或者“.”,那么当前没有什么地址变动,地址栈不需要变动
2、如果是“…” 则需要出栈(如果栈为空则不操作)因为这是返回上级目录的符号
3、其他情况压栈

  1. class Solution {
  2. public:
  3. string simplifyPath(string path) {
  4. string result;
  5. stack<string> p;
  6. while(!path.empty()){
  7. int start=path.find("/");
  8. path=path.substr(start+1);
  9. int end=path.find("/");
  10. if (end==-1) end=path.length();
  11. string part=path.substr(0,end); //找到‘/’与‘/’中间的子串
  12. path=path.substr(end);
  13. if (part=="." || part=="") continue; //第一种情况
  14. else if (part==".."){ //第二种情况
  15. if (p.empty()) continue;
  16. p.pop();
  17. }
  18. else p.push(part); //第三种情况
  19. }
  20. while (!p.empty()){
  21. result="/"+p.top()+result;
  22. p.pop();
  23. }
  24. if (result.empty()) result="/";
  25. return result;
  26. }
  27. };

发表评论

表情:
评论列表 (有 0 条评论,366人围观)

还没有评论,来说两句吧...

相关阅读

    相关 leetcode71. 简化路径 Unix 风格

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

    相关 leetcode 71简化路径

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

    相关 71. 简化路径

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

    相关 LeetCode71简化路径

    71. 简化路径 1. 问题重述 将Unix风格的文件路径简化及合法化 , 防止用户恶意输入路径 > 请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录