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


    给定一个文档 (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;
                
        }
    };
             

  • 相关阅读:
    搜索回车跳转页面
    登录验证码
    【排序算法】排序算法之插入排序
    PAT 乙级 1044 火星数字 (20 分)
    PAT 甲级 1035 Password (20 分)
    PAT 甲级 1041 Be Unique (20 分)
    PAT 甲级 1054 The Dominant Color (20 分)
    PAT 甲级 1027 Colors in Mars (20 分)
    PAT 甲级 1083 List Grades (25 分)
    PAT 甲级 1005 Spell It Right (20 分)
  • 原文地址:https://www.cnblogs.com/mckc/p/9655812.html
Copyright © 2020-2023  润新知