leetcode simplify path

問題描述:

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

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

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".

問題分析:

對於一個給定的路徑做簡化處理, 需要解決如下幾個問題:

1. 正確的識別出目錄

2. 目錄分爲三種:

         . 目錄    跳過

        .. 目錄   彈出棧頂元素

   普通目錄   入棧

示例代碼:

 string simplifyPath(string path)
    {
        vector<string> st;
        string ret;
        
        assert(path[0] == '/');
        int n = path.length();
        int i = 0;
        while (i < n)
        {
            for (i = i + 1; i < n && path[i] == '/'; i++);
            if (i >= n) break;
            int start = i;
            for (i = i + 1; i < n && path[i] != '/'; i++);
            int end = i;
            string dir = path.substr(start, end - start);
            
            if (dir == "..")
            {
                if (!st.empty()) st.pop_back();
            }
            else if (dir != ".")
            {
                st.push_back(dir);
            }
            else
            { /* no operation */ }
        }
        if (st.empty()) return "/";
        for (i = 0; i < st.size(); i++)
        {
            ret += "/" + st[i];
        }
        return ret;
    }


發佈了149 篇原創文章 · 獲贊 8 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章