- 首先我要在纸上,非常非常聪明且迅速且机灵
- 给出几个用例,找出边界用例和特殊用例,确定特判条件;在编码前考虑到所有的条件
- 给出函数头
- 暴力解,简述,优化。
- 给出能够想到的最优价
- 伪代码,同时结合用例
- 真实代码
Simplify Path
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"
class Solution {
public:
string simplifyPath(string s) {
// /./ -> /
string d;
for(int i=0; i<s.size(); i++)
{
if(i<s.size()-2 &&
s[i]=='/' &&
s[i+1]=='.' &&
s[i+2]=='/')
{
d.append(1, '/');
i+=2;
}
else
{
d.append(1, s[i]);
}
}
// return d;
// //// -> /
string d2;
for(int i=0; i<d.size(); i++)
{
if( d[i]=='/')
{
if(i!=d.size()-1 || d.size() == 1)
d2.append(1, '/');
do{
i++;
}
while(i<d.size() && d[i]=='/'); i--;
}
else
{
d2.append(1, d[i]);
}
}
//return d2;
// xxxxxx/../yyyyyyyy/ -> yyyyyyy/
// zzzzz/xxxxxx/../yyyyyyyy/ -> zzzzz/yyyyyyy/
// p i
string d3;
string pre;
vector<string> pre_stk;
for(int i=0; i<d2.size(); i++)
{
int ti=i;
bool f = false;
if( i< d2.size()-3 &&
d2[i]=='/'&&
d2[i+1]=='.' &&
d2[i+2]=='.' &&
d2[i+3]=='/' )
{
i+=3;
pre.clear();
f=true;
//if(pre_stk.size()>0) pre_stk.erase(pre_stk.end()--);
if(i< d2.size()-3 &&
d2[i]=='/'&&
d2[i+1]=='.' &&
d2[i+2]=='.' &&
d2[i+3]=='/')
if(pre_stk.size()>0) pre_stk.erase(pre_stk.end()--);
while(i< d2.size()-3 &&
d2[i]=='/'&&
d2[i+1]=='.' &&
d2[i+2]=='.' &&
d2[i+3]=='/')
{
i+=3;
if(pre_stk.size()>0)
pre_stk.erase(pre_stk.end()--);
}
}
if(d2[ti]=='/')
{
pre_stk.push_back(pre);
pre.clear();
}
else
{
pre.append(1, d2[ti]);
}
}
if(d2=="/" || d2=="/."|| d2=="/..") return "/";
if(pre != ".")
pre_stk.push_back(pre);
for(int i=0;i<pre_stk.size();i++)
{
if(pre_stk[i].size()>0 && pre_stk[i]!=".")
{
d3.append("/");
d3.append(pre_stk[i]);
}
}
if(d3=="/" || d3=="/."|| d3=="/..") return "/";
return d3;
}};
本文介绍了一个用于简化Unix文件系统的绝对路径的算法实现。通过解析输入字符串并应用一系列转换规则,如忽略`.`和删除`..`来返回规范化的路径。文章详细展示了如何使用栈来处理路径元素,最终形成规范路径。
837

被折叠的 条评论
为什么被折叠?



