zoukankan      html  css  js  c++  java
  • [LintCode] Simplify Path

    主要须要解决的问题是字符串分割。直接的做法是定位/之间的字符串或者自己编写split函数,并根据要求解析。简洁的做法是使用stringstream做字符串分割。

    写法1:直接双指针循环定位

    string simplifyPath(string &path) {
        if (path.empty()) return path;
        
        vector<string> vec;
        int start = 0, end = 1, n = path.size();
        while (end < n) {
            while (end < n && path[end] != '/') end++;
            string str = path.substr(start, end - start);
            if (str == "/" || str == "/.") ; // do nothing
            else if (str == "/..") {
                if (!vec.empty()) vec.pop_back();
            } else {
                vec.push_back(str);
            }
            start = end; end++;
        }
        
        if (vec.empty()) return "/";
        
        string ret;
        for (auto& str : vec) {
            ret += str;
        }
        return ret;
    }
    

    写法2:使用stringstream分割字符串

    string simplifyPath(string& path) {
        if (path.empty()) return path;
    
        vector<string> vec;
        stringstream ss(path);
        string str;
        while (getline(ss, str, '/')) {
            if (str.empty() || str == ".") {
                continue;
            } else if (str == "..") {
                if (!vec.empty()) vec.pop_back();
            } else {
                vec.push_back(str);
            }
        }
    
        if (vec.empty()) return "/";
    
        string ret;
        for (auto& str : vec) {
            ret += ("/" + str);
        }
        return ret;
    }
    
  • 相关阅读:
    读REDIS数据结构
    一致性哈希虚节点解决雪崩问题
    TCP的建立和关闭
    nginx和apache的比较
    进程和线程的区别
    acm过河卒
    搭建centos7 的php环境
    navicat 中 oracle数据传输到mysql上
    安装虚拟机精简版centos7
    整合tomcat的一些配置
  • 原文地址:https://www.cnblogs.com/ilovezyg/p/7507424.html
Copyright © 2011-2022 走看看