注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

HT·生活

123

 
 
 

日志

 
 

ex71 Simplify Path  

2015-05-23 22:45:42|  分类: leetcode |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

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

click to show corner cases.

Corner Cases:

  • Did you consider the case where path = "/../"?
    In this case, you should return "/".
  • Another corner case is the path might contain multiple slashes '/' together, such as "/home//foo/".
    In this case, you should ignore redundant slashes and return "/home/foo".
思路很简单,就是要压栈,判断当前的目录类别,需要考虑的就是那些冗余的斜杠,以及最后栈为空的特殊情况。见代码

class Solution {
public:
stack<string> myStack;
string simplifyPath(string path) {
string str;
if (path.length() <= 0)
return str;
traverse(path);
//从栈中把数据弹出来
if (myStack.empty())
{
//如果栈为空的话,那么就把当前目录放到str里面去
str.append("/");
}
string temp;
while (!myStack.empty())
{
temp = myStack.top();
myStack.pop();
str.insert(0,temp);
}
//下面的重复判定其实没有必要
int len = str.length();
if (len>= 2&&str[0]==str[1])
{
str = str.substr(1,len-1);
}

return str;

}
void traverse(string path)
{
int len = path.size();
int ps = 0,pe = ps;
string str;

int range;
while (ps < len)
{
while (((pe+1)<len) && (path[pe+1] != '/'))
{
pe++;
}
//切割字符串

range = pe - ps + 1;
str = path.substr(ps, range);
if (str == "/")
{
//什么也不错,因为这个不需要压栈
}
else if (str == "/.")
{
//什么也不错,因为这个不需要压栈
}
else if (str == "/..")
{
if (!myStack.empty())
{
myStack.pop();
}
}
else
{
myStack.push(str);
}
//ps重置到pe
pe++;
ps = pe;

}

}
};



  评论这张
 
阅读(26)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017