题目

简化路径

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

样例

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

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

挑战

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

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

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

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

解题

linux 没碰过,真的表示不知道这个是什么鬼

参考链接, 参考链接2

Unix的path规则可以在这里了解:
http://en.wikipedia.org/wiki/Path_(computing)

路径简化的依据是:

当遇到“/../"则需要返回上级目录,需检查上级目录是否为空。

当遇到"/./"则表示是本级目录,无需做任何特殊操作。

当遇到"//"则表示是本级目录,无需做任何操作。

当遇到其他字符则表示是文件夹名,无需简化。

当字符串是空或者遇到”/../”,则需要返回一个"/"。

当遇见"/a//b",则需要简化为"/a/b"。

先将字符串依"/"分割出来,然后检查每个分割出来的字符串。

当字符串为空或者为".",不做任何操作。

当字符串不为"..",则将字符串入栈。

当字符串为"..", 则弹栈(返回上级目录)。

这样栈内的字符就是答案,但是需要进行重新组合

以“/”隔开组合

public class Solution {
/**
* @param path the original path
* @return the simplified path
*/
public String simplifyPath(String path) {
// Write your code here
if(path==null)
return null;
String[] p = path.split("/");
Stack<String> stack = new Stack<String>();
for(int i=0;i<p.length;i++){
if(p[i].equals(".") || p[i].isEmpty()){
continue;
}else if(p[i].equals("..")){
if(!stack.empty()){
stack.pop();
}
}else{
stack.push(p[i]);
}
}
StringBuilder sb = new StringBuilder();
while (!stack.isEmpty()) {
sb.insert(0, stack.pop());
sb.insert(0, "/");
}
return sb.length() == 0 ? "/" : sb.toString(); }
}

Java Code

总耗时: 9414 ms

class Solution:
# @param {string} path the original path
# @return {string} the simplified path
def simplifyPath(self, path):
# Write your code here
if path == None:
return None
p = path.split("/")
stack = []
for s in p:
if s == '.' or len(s)==0:
continue
elif s == '..':
if len(stack)!=0:
stack.pop()
else:
stack.append(s)
res = ""
if len(stack)==0:
return "/"
for i in stack:
res += "/"+i
return res

Python Code

总耗时: 450 ms

最新文章

  1. Angular JS 学习之控制器
  2. 9、java中的final关键字
  3. fluentd正则表达式
  4. css3学习笔记之用户界面
  5. redmine一键安装包下载链接
  6. erlang mnesia 数据库查询
  7. css整理 background-size优化
  8. oracle表空间扩容
  9. TCP连接建立系列 — TCP选项解析
  10. GBDT 算法:原理篇
  11. sql 的是四个排名函数
  12. C#单例类的实现
  13. 【读书笔记】iOS-网络-应用间通信
  14. Android Butterknife框架
  15. pandas练习(四)--- 应用Apply函数
  16. 如何使用C#关键字const,readonly,static
  17. mark v1 SecurityConfig
  18. 如何使用 MSBuild Target(Exec)中的控制台输出
  19. 问题小记(MyBatis传参出现的小问题)
  20. Linux之手动设置IP地址

热门文章

  1. 打造简单实用的Thinkphp分页样式(Bootstrap版本)
  2. 解决iOS设备屏幕切换时页面造成的问题
  3. SQL 面试题(一)
  4. 我的总结SVN的使用
  5. php保存base64数据
  6. [大牛翻译系列]Hadoop(4)MapReduce 连接:选择最佳连接策略
  7. Stanford parser:入门使用
  8. LLVM language 参考手册(译)(2)
  9. C# 链接Sql和Access数据库语句
  10. HDU 2669 第六周 I题