zoukankan      html  css  js  c++  java
  • 71. Simplify Path

    Given an absolute path for a file (Unix-style), simplify it. 

    For example,
    path = "/home/", => "/home"
    path = "/a/./b/../../c/", => "/c"
    path = "/a/../../b/../c//.//", => "/c"
    path = "/a//b////c/d//././/..", => "/a/b/c"

    In a UNIX-style file system, a period ('.') refers to the current directory, so it can be ignored in a simplified path. Additionally, a double period ("..") moves up a directory, so it cancels out whatever the last directory was. For more information, look here: https://en.wikipedia.org/wiki/Path_(computing)#Unix_style

    Corner Cases:

      • Did you consider the case where path = "/../"?
        In this case, you should return "/".
      • Another corner case is the path might contain multiple slashes '/' together, such as "/home//foo/".
        In this case, you should ignore redundant slashes and return "/home/foo".

    AC code:

    class Solution {
    public:
        string simplifyPath(string path) {
            string res, tmp;
            vector<string> stk;
            stringstream ss(path);
            while(getline(ss,tmp,'/')) {
                if (tmp == "" or tmp == ".") continue;
                if (tmp == ".." and !stk.empty()) stk.pop_back();
                else if (tmp != "..") stk.push_back(tmp);
            }
            for(auto str : stk) res += "/"+str;
            return res.empty() ? "/" : res;
        }
    };
    
    Runtime: 4 ms, faster than 99.84% of C++ online submissions for Simplify Path.
    Get line from stream into string

    Extracts characters from is and stores them into str until the delimitation character delim is found (or the newline character, ' ', for (2)).

    The extraction also stops if the end of file is reached in is or if some other error occurs during the input operation.

    If the delimiter is found, it is extracted and discarded (i.e. it is not stored and the next input operation will begin after it).

    Note that any content in str before the call is replaced by the newly extracted sequence.

    Each extracted character is appended to the string as if its member push_back was called.

    Parameters

    is
    istream object from which characters are extracted.
    str
    string object where the extracted line is stored.
    The contents in the string before the call (if any) are discarded and replaced by the extracted line.

    2. string和stringstream用法总结

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    记录s标签范例
    链表问题总结
    Hibernate学习总结
    HDU2460-Network
    CF464C-Substitutes in Number
    CF666E-Forensic Examination
    CF373C-Counting Kangaroos is Fun
    CF558E-A Simple Task
    HDU5669-Road
    CF341D-Iahub and Xors
  • 原文地址:https://www.cnblogs.com/h-hkai/p/9833262.html
Copyright © 2011-2022 走看看