71简化路径 Posted on 2020-05-13 Words count in article: 360 | Reading time ≈ 1 71简化路径 勉强把题目看懂了。。但是还得看题解 1234567891011121314151617181920212223242526272829303132333435363738class Solution {public: string simplifyPath(string path) { //先让path加上一个/,方便判断而且最后不会计算在内 path+='/'; stack<string> temp_stack; string temp_string; for(auto c:path){ //两个'/'之间为单级目录子串 if(c=='/'){//地址从前向后跳转,如两个'/'之间的地址字符串是“..”,切换上一级目录,即将最后压入的一级目录弹出 if(temp_string==".."){ if(!temp_stack.empty()) temp_stack.pop();//考虑特殊情况,如果前面没有进入子目录,一开始就是"..",此时既不能压入栈也无法弹出,需要排除,不做操作即可 }//其他情况,如两个'/'之间的地址字符串存在,且不为'.'(同级目录,无变化),必为字母组成的地址,因此压入栈 else if (temp_string!="." && !temp_string.empty()){ temp_stack.push(temp_string); } //清空单级目录字符串,准备记录下两个'/'之间的目录字符串 temp_string.clear(); } //记录单级目录字符串 else{ temp_string.push_back(c); } } //从栈中取出各级目录子串,加上'/'形成完整地址 string result; while(!temp_stack.empty()){ result='/'+temp_stack.top()+result; temp_stack.pop(); } //特殊情况,栈中无元素,没有扫描到有效地址,则返回'/' if(result.empty()) result="/"; return result; }}; 这样的话,如果是/./那么其实什么事情都不用干,如果有多个/,那么后面的/也没用 -------------本文结束,感谢您的阅读------------- Post author: Jason Post link: https://jasonxqh.github.io/2020/05/13/71%E7%AE%80%E5%8C%96%E8%B7%AF%E5%BE%84/ Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.