标签:public stream nbsp 全路径 split 一起 语言 出现 leetcode
给定一个文档 (Unix-style) 的完全路径,请进行路径简化。
例如,
path = "/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
边界情况:
"/../"
的情况?"/"
。‘/‘
,如 "/home//foo/"
。"/home/foo"
。=============================================================
可得到路径简化规则:
思路:可以根据‘/‘把路径分割成多个元素,根据规则压入栈中,最后用‘/’拼接;
首先是分割,不想python等的高级语言有split可以直接分割;但是可以用stringstream+getline实现分割功能;
按规则压入栈中:遇到‘.’不处理,遇到‘..’ pop;其他元素push;
下面是AC代码:
class Solution { public: string simplifyPath(string path) { vector <string> mark; string s; stringstream ss(path); string result; while(getline(ss,s,‘/‘)){ //使用stringstream和getline 实现分割功能。 if(s=="."||s=="") //如果不加入 ""会出错,存在空字符?! continue; else if(s==".." && !mark.empty()) //注意空栈的情况! mark.pop_back(); else if(s!="..") mark.push_back(s); } for(string sss:mark){ result+="/"+sss; } if(mark.empty())return "/"; return result; } }; //用stack不能用cpp11标准的for(:) //vector却可以。。。
//why??求大神解答
Leetcode 71 简化路径simplify-path(栈)
标签:public stream nbsp 全路径 split 一起 语言 出现 leetcode
原文地址:https://www.cnblogs.com/mckc/p/9655812.html