加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Leetcode 71 简化路径simplify-path(栈)

发布时间:2020-12-15 18:17:47 所属栏目:安全 来源:网络整理
导读:给定一个文档 (Unix-style) 的完全路径,请进行路径简化。 例如, path?=? "/home/" ,=? "/home" path?=? "/a/./b/../../c/" ,=? "/c" 边界情况: 你是否考虑了 路径 =? "/../" ?的情况? 在这种情况下,你需返回? "/" ?。 此外,路径中也可能包含多个斜杠?

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

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

边界情况:

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

=============================================================

可得到路径简化规则:

  1. 末尾‘/’删除;
  2. 不重复出现‘/’;
  3. ‘/./’删除;
  4. ‘/../’连并前个路径一起删除;

?

思路:可以根据‘/‘把路径分割成多个元素,根据规则压入栈中,最后用‘/’拼接;

?

首先是分割,不想python等的高级语言有split可以直接分割;但是可以用stringstream+getline实现分割功能;

按规则压入栈中:遇到‘.’不处理,遇到‘..’? pop;其他元素push;

?

下面是AC代码:

class Solution {
public:
    
    string simplifyPath(string path) {
        vector <string> mark;
        string s;
        stringstream ss(path);
        string result;
        while(getline(ss,s,/)){     //使用stringstream和getline 实现分割功能。
            if(s=="."||s=="")         //如果不加入 ""会出错,存在空字符?! 
                continue;
            else if(s==".." &&  !mark.empty())     //注意空栈的情况!
                mark.pop_back();
            else if(s!="..") mark.push_back(s);    
        }

        for(string sss:mark){
            result+="/"+sss;
        }
        if(mark.empty())return "/";
        return result;
            
    }
};
                //用stack不能用cpp11标准的for(:)
                 //vector却可以。。。                  //why??求大神解答

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读