NC299 简化目录路径
简化目录路径
https://www.nowcoder.com/practice/3177bcbfd947409ba833efb5a5b4a24c?tpId=196&tqId=40136&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26pageSize%3D50%26search%3D%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196&difficulty=undefined&judgeStatus=undefined&tags=581&title=
class Solution {
public:
string simplifyPath(string path) {
string a,b;
//如果路径的最后不是'/',则在路径字符串的最后添加上'/',这样才可以处理最后一个路径
if(path.back()!='/'){
path+='/';
}
for(auto c:path){
//如果不是'/',即就是路径内具体的英文内容添加到b字符串上
if(c!='/') {
b+=c;
}else{
//如果是'/',则就需要分成几种情况讨论:
//情况一:如果当前记录的b是两个点,则返回上一层的目录,再判断一下如果a不为空,就将/也弹出
if(b==".."){
while(a.size()&&a.back()!='/') a.pop_back();
if(a.size()) a.pop_back();
//情况2:如果b不是'.'且b不为空,就将b记录的英文字符串的前面添加一个‘/’
}else if(b!="."&&b!=""){
a+='/'+b;
}
//每次将记录路径的英文字符清空
b.clear();
}
}
//最后判断一下,如果a为空,由于最少也要有根目录:‘/’
if(a.empty()) a='/';
return a;
}
};