当前位置: 首页 > news >正文

[LeetCode]—Simplify Path 简化路径表达式

Simplify Path

 

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

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


注意几个用例:

Input :   /..   Output: /


分析:

       本题个人觉得更多的是考查语言分割函数的使用。

       C++中string分割函数可以用stringstream+getline来实现分割功能。istream& getline (istream& is, string& str, char delim);

      C语言中对于char * 可以使用strtok来进行分割。循环进行直到取出所有字符串。

       举例:出自: [C/C++标准库]_[初级]_[分割字符串Split]

void TestStrtok()  
{  
    //1.非线程安全的,如果多个线程同时调用,会覆盖掉原来的值.  
    //2.支持以字符串分割.  
    //3.源字符串必须是可修改的.  
    char c_str[]="google||twitter||facebook||microsoft||apple||ibm||";  
    const char* delim = "||";  
    char* result = strtok(c_str,delim);  
    while(result != NULL)  
    {  
        cout << result << endl;  
        result = strtok(NULL,delim);  
    }  
}  
  
void TestGetLineWithStringStream()  
{  
    //1.线程安全的,但是只能以字符作为分隔符  
    stringstream ss("google|twitter|facebook|microsoft|apple|ibm|");  
    string str;  
    while(getline(ss,str,'|'))  
    {  
        cout << str << endl;  
    }  
}  



本题代码:

class Solution {
public:
    string simplifyPath(string path) {
        stack<string> st;
        stringstream ss(path);
        string str;
        string res="";

        st.push("/");
        while(getline(ss,str,'/'))
        {
            if(str==""||str==".")continue;
            else if(str==".."){
                if(st.top()!="/")
                     st.pop();
            }
            else
                 st.push(str);
        }

        if(st.top()=="/")return "/";
        while(!st.empty()){
         if(st.top()!="/"){
            res.insert(0,'/'+st.top()); 
         }
            st.pop();
        }
        return res;
    }
};


相关文章:

  • 如何编写跨平台应用程序
  • Gartner:2009~2010年值得关注的8大移动技术
  • 金玉良言十六句
  • 将 Flex 集成到 Java EE 应用程序的最佳实践
  • Java软件工程师几个面试问题
  • 互联网创业几个思路
  • Asp.net 中文件以Binary 形式数据库的保存和读取
  • [LeetCode]—Permutations 求全排列
  • [LeetCode]—Permutations II 求全排列(有重复值)
  • 动态装卸DLL示例-匪徒和
  • 一个困扰我一个多星期的Nebula3的BUG
  • [Python]—Linux Server 系统监控程序
  • .NET 4.0中使用内存映射文件实现进程通讯
  • 中国移动短信指令大全
  • SQLServer中的循环批处理
  • __proto__ 和 prototype的关系
  • Java Agent 学习笔记
  • Laravel5.4 Queues队列学习
  • Linux下的乱码问题
  • WebSocket使用
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 官方解决所有 npm 全局安装权限问题
  • 使用Swoole加速Laravel(正式环境中)
  • 事件委托的小应用
  • 试着探索高并发下的系统架构面貌
  • 我从编程教室毕业
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • #Linux(帮助手册)
  • (4)logging(日志模块)
  • (C语言)二分查找 超详细
  • (pojstep1.3.1)1017(构造法模拟)
  • (二)JAVA使用POI操作excel
  • (二)构建dubbo分布式平台-平台功能导图
  • (二)丶RabbitMQ的六大核心
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (一)插入排序
  • (一一四)第九章编程练习
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .gitignore
  • .htaccess 强制https 单独排除某个目录
  • .net core 6 redis操作类
  • .net core Swagger 过滤部分Api
  • .net core 依赖注入的基本用发
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .Net程序帮助文档制作
  • .NET委托:一个关于C#的睡前故事
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [<MySQL优化总结>]
  • [2]十道算法题【Java实现】
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]