您的位置:首页 > 其它

leetcode 71: Simplify Path

2015-08-03 23:53 330 查看
So fucked up by all detailed corner cases!!!

class Solution {
public:
string simplifyPath(string path) {
string res;
res+=path[0];
int dot_num=0;
for(int i=1;i<path.size();i++)
{
if(path[i]=='/')
{
if(path[i-1]>='a'&&path[i-1]<='z')
res+=path[i];
else if(dot_num==1&&path[i-1]=='.')
res.pop_back();
else if(dot_num==2&&res.size()!=3&&path[i-1]=='.')
{
for(int j=0;j<3;j++)
res.pop_back();
while(res[res.size()-1]!='/')
res.pop_back();
}
else if(dot_num==2&&res.size()==3)
{
res.pop_back();
res.pop_back();
}
else if(path[i-1]=='/')
continue;
else
{
res+='/';
}
dot_num=0;
}
else if(path[i]=='.')
{
res+='.';
dot_num++;
}
else
res+=path[i];
}
if(res[res.size()-1]=='.')
{
if(dot_num==2&&res.size()!=3)
{
for(int i=0;i<3;i++)
res.pop_back();
while(res[res.size()-1]!='/')
res.pop_back();

4000
}
else if(dot_num==2&&res.size()==3)
{
res.pop_back();
res.pop_back();
}
else if(dot_num==1)
res.pop_back();
}
while(res[res.size()-1]=='/'&&res.size()>1)
res.pop_back();
return res;
}
};

Updated version, looks cleaner

class Solution {
public:
string simplifyPath(string path) {
vector<string> dir;
int i=0,j=1;
int len=path.length();
if(path[len-1]!='/')//add a / at the end if there is no
{
path.push_back('/');
len++;
}
while(j<len)
{
if(path[j]=='/')
{
string temp=path.substr(i,j-i);
if(temp=="/.."&&!dir.empty())//delete previous directory
dir.pop_back();
else if(temp!="/"&&temp!="/."&&temp!="/..")
dir.push_back(temp);
i=j;
}
j++;
}
if(dir.empty())
return "/";
string res;
for(int i=0;i<dir.size();i++)
res+=dir[i];
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: