leetcode 71: Simplify Path
2015-08-03 23:53
330 查看
So fucked up by all detailed corner cases!!!
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;
}
};
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;
}
};
相关文章推荐
- HDU - 3416 Marriage Match IV (最大流)
- spring 事务传播属性
- Java学习笔记(九) Bitset
- android_菜单的创建_xUtils框架使用
- android屏幕适配
- 连接SSO CAS的代码示例
- FFmpeg源代码结构图 - 编码
- POJ_1986_Distance Queries(LCA+tarjan)
- 升级win10,提示(RAM)内存不足2G的解决办法,亲测可行
- poj 1840
- JDK动态代理浅析
- hd2553 N皇后问题
- UVA 11925 Generating Permutations 生成排列 (序列)
- git 的分支体系命令汇总
- SetTimeOut jquery的作用
- 设计模式01: Singleton 单例模式(创建型模式)
- NOJ 2079 Prime (莫比乌斯反演)
- hdu-5318 The Goddess Of The Moon(2015 Multi-University Training Contest 3)
- BootStrap导航的创建2
- 灾情巡视路线模型