421-简化路径

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

样例

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

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

挑战

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

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

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

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

标签

字符串处理 栈

思路

  • 首先分割 path,滤除 '/',且将分割后的路径保存在数组里,数组每个元素为一个目录名,包含 "." 和 ".."
  • 然后遍历数组,将此时的元素入栈,若遇到 "." ,略过;遇到 "..",则出栈一个元素(注意栈空的情况)
  • 最后根据栈生成简化后的路径

code

class Solution {
public:
/*
* @param path: the original path
* @return: the simplified path
*/
string simplifyPath(string path) {
// write your code here
int size = path.size();
if (size <= 0) {
return string("");
}
// 分割路径
path += '/';
vector<string> pathVector;
string p;
for (int i = 0; i <= size; i++) {
if (path[i] == '/') {
if (!p.empty()) {
pathVector.push_back(p);
p.clear();
}
}
else {
p += path[i];
}
}
// 简化路径
stack<string> parhStack;
for (int i = 0; i < pathVector.size(); i++) {
if (pathVector[i] != "." && pathVector[i] != "..") {
parhStack.push(pathVector[i]);
}
else if (pathVector[i] == ".." && !parhStack.empty()) {
parhStack.pop();
}
}
// 重写路径
string result;
if (parhStack.empty()) {
return string("/");
}
while (!parhStack.empty()) {
result.insert(0, "/" + parhStack.top());
parhStack.pop();
}
return result;
}
};

lintcode-421-简化路径的更多相关文章

  1. lintcode 中等题:Simplify Path 简化路径

    题目 简化路径 给定一个文档(Unix-style)的完全路径,请进行路径简化. 样例 "/home/", => "/home" "/a/./b ...

  2. LeetCode:简化路径【71】

    LeetCode:简化路径[71] 题解参考天码营:https://www.tianmaying.com/tutorial/LC71 题目描述 给定一个文档 (Unix-style) 的完全路径,请进 ...

  3. LeetCode OJ:Simplify Path(简化路径)

    Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", ...

  4. LeetCode 71.简化路径

    LeetCode 71.简化路径 题目描述: 以 Unix 风格给出一个文件的绝对路径,你需要简化它.或者换句话说,将其转换为规范路径.在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此 ...

  5. Java实现 LeetCode 71 简化路径

    71. 简化路径 以 Unix 风格给出一个文件的绝对路径,你需要简化它.或者换句话说,将其转换为规范路径. 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此外,两个点 (-) 表示将 ...

  6. [LintCode] Simplify Path 简化路径

    Given an absolute path for a file (Unix-style), simplify it. Have you met this question in a real in ...

  7. [LeetCode] Simplify Path 简化路径

    Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", ...

  8. [Swift]LeetCode71. 简化路径 | Simplify Path

    Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", ...

  9. 【leetcode-71】 简化路径

    (1 pass) 以 Unix 风格给出一个文件的绝对路径,你需要简化它.或者换句话说,将其转换为规范路径. 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此外,两个点 (..) 表示 ...

  10. LeetCode(71):简化路径

    Medium! 题目描述: 给定一个文档 (Unix-style) 的完全路径,请进行路径简化. 例如,path = "/home/", => "/home&quo ...

随机推荐

  1. Qt界面编程基本操作

    Qt界面编程基本操作 了解基本代码构成 类widget的头文件widget.h如下: #ifndef WIDGET_H #define WIDGET_H #include <QWidget> ...

  2. [转] JetBrains Products License Server,适用RubyMine、Goland等

    原文:http://jetbrains.license.laucyun.com/ Working Server http://jetbrains.license.laucyun.com (Lower ...

  3. 在javascript中的跨域解决

    跨域产生的原因 跨域是由浏览器的同源策略引起的,即不同源(协议,域名,端口中其中有一个不同)的js是不能读取对方的资源的.当要网站中的js要请求其他网站的数据时就会产生跨域问题,就像下面这样,浏览器会 ...

  4. USB助手

    自动拷贝U盘的数据--- 由于之前学习了win32的编程就想着做一个有趣的东西.想了想准备做一个可以自动复制U盘数据的程序. 对于这个程序的功能首先就是要能够识别U盘是否插入了,这里使用了函数GetL ...

  5. 20155211 2016-2017-2《Java程序设计》课程总结

    20155211 2016-2017-2<Java程序设计>课程总结 (按顺序)每周作业链接汇总 预备作业1:对师生关系的理解 预备作业2:熟能生巧及学习c语言的心的 预备作业3:关于假期 ...

  6. 将linux上的Java代码上传到码云

    将linux上的Java代码上传到码云 1.在linux上直接输入命令获取git sudo apt-get install git 显示资源被占用,按照图中方法强制安装 2.建立与教材配套的目录结构 ...

  7. C语言第三周

    一. 字符串常量 只要有一对双引号括起来的字符序列就是字符串常量.列如"hello"接"123" 注意:"a"是字符串常量'a'是字符常量. ...

  8. 2017-2018-1 20155307 《信息安全系统设计基础》第san周学习总结

    2017-2018-1 20155307 <信息安全系统设计基础>第三周学习总结 教材学习内容总结 无符号数和有符号数的特性,数字如何表示,IEEE标准,浮点数格式.(我感觉我把课下测试做 ...

  9. 2017-2018-1 20155320 《信息安全系统设计基础》第四周学习总结(课堂实践补交+myhead与mytail加分项目)

    2017-2018-1 20155320 <信息安全系统设计基础>第四周学习总结(课堂实践补交+myhead与mytail实现) 课堂实践内容 1 参考教材第十章内容 2 用Linux I ...

  10. odoo学习之:【转】控制menuitem的显示权限

    作者原文:https://blog.csdn.net/wangnan537/article/details/43992771 在实际应用Odoo(OpenERP)的过程中, 会有对某用户组隐藏菜单的需 ...