题目:Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
思路:
顺序执行,首先循环一开始是找出第一个非/的字符,接下来保存到为/的字符串,
并判断是否为".",如果是,那就继续continue
如果是“..”,首先判断堆栈是否有数据,有数据,清除一个数据。
其他的就是存入这个字符串。在程序结尾处,就是先是添加“/”,再结尾附上字符串。
代码:
class Solution { public: string simplifyPath(string path) { int len=path.length(); int i=0;//代表具体位置 vector<string> result; while(i<len){ //去掉所有的//// while( path[i]=='/') i++; // 这个地方不加“ i< len”是没事的,因为开头就已经判断 if(i==len) break; //找出接下来的字符 string temp; while(i<len && path[i]!='/'){ // 这个地方不加“ i< len”不行,因为上面i++可能会导致溢出 temp.push_back(path[i++]); } if(temp==".") continue; if(temp=="..") { if(!result.empty()){ result.pop_back(); } } else { result.push_back(temp); } } //程序往下执行说明有数据 string final; if(result.empty()){ return "/"; } for(int i=0;i<result.size();i++){ final.append("/"); final.append(result[i]); } return final; } };