(每日算法)Leetcode--Simplify Path (简单路径)

给定一个Unix风格的路径,简化之。使其不改变路径的结果,但是去掉中间无用的字符。

因为系统执行的时候也是逐段查看的,因此最直观的做法就是使用栈来简化,当是/..时,出栈;当是/.时,忽视;当时其他时才进栈。

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

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

不难写出代码如下:

class Solution {
public:
    string simplifyPath(string path) {
        vector<string> result;
        for(auto i = path.begin(); i != path.end(); )
        {
            ++i;
            auto j = find(i, path.end(), '/');//查找
            string dir = string(i, j);  //通过两个迭代器构造字符串
            if(!dir.empty() && dir != ".")//当是///时dir为空
            {
                if(dir == ".."){
                    if(!result.empty())
                        result.pop_back();
                }
                    else
                        result.push_back(dir);
            }
            i = j;
        }
        stringstream out;
        if(result.empty())
            out<<"/";
        else
            for(auto item : result)
                out<<"/"<<item;
        return out.str();
    }
    
};


有三个知识点,写出来,大家一起学习:

1)find函数的使用

 算法并不直接操纵容器,而是遍历两个迭代器指定的一个元素范围
 find(vec.begin(), vec.end(), val)
  在[vec.begin(), vec.end())范围内(左闭右开区间)查找元素val。
  如果查找得到,然回该元素的迭代器;查找不到,返回第二个参数。

2)通过迭代器构造string

string dir = string(i, j)

将dir初始化为迭代器i和j之间元素的拷贝(左闭右开区间)。

类通过=运算符的初始化和dir(string(i, j))相同。

3)stringstream的知识点

允许向string流中读写数据,out.str()--返回out所保存的string 拷贝;out.str(s)--将string s拷贝到out中,返回void









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值