简化路径

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

样例

"/home/", => "/home"

"/a/./b/../../c/", => "/c"

挑战
  • 你是否考虑了 路径 = "/../" 的情况?

    在这种情况下,你需返回"/"

  • 此外,路径中也可能包含双斜杠'/',如 "/home//foo/"

    在这种情况下,可忽略多余的斜杠,返回 "/home/foo"

思路:

1. 将字符串按“/”划分。

2. 将有意义的字符串入栈,如果遇到“..”则出栈。

3. 最后将栈中剩余字符串以"/"连接,并返回。未空默认返回“/”

4. 注意刚开始加上“/”,方便以后的划分。


代码如下:

class Solution {
public:
    /**
     * @param path the original path
     * @return the simplified path
     */

    string simplifyPath(string& path) {
        // Write your code here
        stack<string> s1,s2;
        string temp = "";
        path +="/";
        for(int i = 0;i!=path.size();++i){
            if(path[i] == '/'){
                if(temp == ".."){
                    if(!s1.empty()){
                        s1.pop();
                    }
                }
                else if(temp == "." || temp == ""){
                    ;                    
                }
                else{
                    s1.push(temp);
                }
                temp = "";
            }
            else{
                temp += path[i];
            }
        }
        if(s1.empty()){
            return "/";
        }
        string res = "";
        while(!s1.empty()){
           res = "/" +s1.top()+res;
           s1.pop();
        }
        return res;
    }
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值