美文网首页
71. Simplify Path

71. Simplify Path

作者: analanxingde | 来源:发表于2018-10-11 21:07 被阅读5次

    一个split string字符串的小函数

    //调用:split(path,s,&paths);
     void split(string& s,string& delim,std::vector<string>* ret)
        {
            size_t last = 0;
            size_t index = s.find_first_of(delim,last);
            while(index != string::npos)
            {
                ret->push_back(s.substr(last,index-last));
                last= index+1;
                index = s.find_first_of(delim,last);
            }
            if(index-last > 0)
            {
                ret->push_back(s.substr(last,index-last));
            }
        };
    

    解法思路

    1. 以/为分隔符,得到/之间的字符串:item。注意,为了处理..的情况,需要现将字符串存在stack中,进行弹栈。之后输出时,再放到vector中进行反转输出。
    2. 对于item:1). 跳过 2).. 弹栈 3)其余的字符串,push到stack中
    3. 将stack的内容放到vector中,并对其进行反转reverse(strs.begin(), strs.end());,输出。(注意,当vector的长度为0时,要加入/符号)
    class Solution {
    public:
        string simplifyPath(string path) {
            stack<string> sk;
            
            int i = 0;
            while(i < path.size()) {
                while(i < path.size() && path[i] == '/')
                    i++;
                
                // deal with situation where there's a bunch of / at the end
                if(i == path.size()) break;
                
                string item = "";
                while(i < path.size() && path[i] != '/')
                {
                    item.push_back(path[i]);
                    i++;
                }
                
                if(item == ".")
                    continue;
                else if(item == ".."){
                    if(!sk.empty())
                        sk.pop();
                }
                else
                    sk.push(item);
            }
            
            vector<string> strs;
            while(!sk.empty()) {
                string item = sk.top();
                sk.pop();
                
                strs.push_back(item); 
            }
            
            reverse(strs.begin(), strs.end());
            string ans = "";
            for(string & item:strs) {
                ans += "/";
                ans += item;
            }
            if(ans.size() == 0)
                ans += "/";
            return ans;
        }
    };
    

    相关文章

      网友评论

          本文标题:71. Simplify Path

          本文链接:https://www.haomeiwen.com/subject/vpkvnftx.html