71. 簡化路徑

自己做
解:遍歷檢查

class Solution {
public:string simplifyPath(string path) {int p = 0;string res;while(p < (int)path.size()){//情況1:遇到"/./" =》p跳過"/."if(p < (int)path.size() - 2 && path[p] == '/' && path[p + 1] == '.' && path[p + 2] == '/')p += 2;//情況2:遇到"//" =》p跳過"/"else if(p < (int)path.size() - 1 && path[p] == '/' && path[p + 1] == '/')p++; //情況3_1:遇到"/abc" =》正常輸入else if(p < (int)path.size() - 1 && path[p] == '/' && path[p + 1] != '/' && path[p + 1] != '.'){res.push_back(path[p]); //加入斜杠p++;while(p < (int)path.size() && path[p] != '/'){ //加入abc ,直到遍歷結束或者遇到下個斜杠res.push_back(path[p]); p++; }}//情況3_2:遇到"/..xxxxx" =》正常輸入else if(p < (int)path.size() - 3 && path[p] == '/' && path[p + 1] == '.' && path[p + 2] == '.' && path[p + 3] != '/'){res.push_back(path[p]); //加入斜杠p++;while(p < (int)path.size() && path[p] != '/'){ //加入.......... ,直到遍歷結束或者遇到下個斜杠res.push_back(path[p]); p++; }}//情況3_3:遇到"/.xxxx" =》正常輸入else if(p < (int)path.size() - 2 && path[p] == '/' && path[p + 1] == '.' && path[p + 2] != '.' && path[p + 2] != '/'){res.push_back(path[p]); //加入斜杠p++;while(p < (int)path.size() && path[p] != '/'){ //加入.......... ,直到遍歷結束或者遇到下個斜杠res.push_back(path[p]); p++; }}//情況4:遇到"/../"或者"/.."(末尾) =》彈出上級目錄,p跳過"/.."【在檢查完有沒有/...的情況后】else if(p < (int)path.size() - 2 && path[p] == '/' && path[p + 1] == '.' && path[p + 2] == '.'){p += 3;while(res.size() > 0 && res[(int)res.size() - 1] != '/') //對于res = "xxx/abc",彈出abc這個上級目錄,得到結果res = "xxx/"res.pop_back();if(res.size() >= 1) //彈出斜杠res.pop_back();} //情況5:末尾不成目錄"abc/" =》 結束遍歷elsebreak;}//防止空目錄if(res.size() == 0)res.push_back('/');return res;}
};

今日總結
