這題難得地方,是將字符串分組,怎麼看待由/分割得字符串。
一種直接得想法是直接split分割所有得/,然後得到得數組再拼接處理。這樣是可行得做法。
如果不用split函數呢?
關鍵是要把 / home/ fool/看成由/結尾,(結尾比開頭好處理)。
這裏遇到.或者空串不處理就好。
..需要彈出前面一個路徑,不需要用額外的棧,只需用再字符數組基礎上處理就好。
這是一道比較有技巧的模擬題目
class Solution {
public:
string simplifyPath(string path) {
// 最好把/看作是結尾,這樣容易處理
string res, name;
if(path.back()!='/') path= path + '/';
for(auto c:path){
if(res.empty()) res+=c;
if(c!='/') name+=c;
else{
if(name!="."&&name!=""&&name!="..") res = res + name + '/';
else if(name==".."){
if(res.size()>1) res.pop_back();
while(res.size()>1&&res.back()!='/') res.pop_back();
}
name.clear();
}
}
if(res.size()>1) res.pop_back();
return res;
}
};