Simplify Path
Given an absolute path for a file (Unix-style), simplify it.
For example,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"
Corner Cases:
- Did you consider the case where path =
"/../"?
In this case, you should return"/". - Another corner case is the path might contain multiple slashes
'/'together, such as"/home//foo/".
In this case, you should ignore redundant slashes and return"/home/foo".
思路:
用一个栈来实现,对特殊情况进行判断
代码:
1 string simplifyPath(string path) { 2 // IMPORTANT: Please reset any member data you declared, as 3 // the same Solution instance will be reused for each test case. 4 stack<string> Stack; 5 while(true){ 6 if(path == "/") 7 break; 8 int index = path.find('/', 1); 9 string tmp; 10 if(index == -1){ 11 tmp = path.substr(1); 12 path = "/"; 13 } 14 else{ 15 tmp = path.substr(1, index-1); 16 path = path.substr(index); 17 } 18 if(tmp == "") 19 continue; 20 else if(tmp == ".."){ 21 if(!Stack.empty()) 22 Stack.pop(); 23 else 24 continue; 25 } 26 else if(tmp != ".") 27 Stack.push(tmp); 28 } 29 string result = ""; 30 if(Stack.empty()) 31 return "/"; 32 while(!Stack.empty()){ 33 result = "/" + Stack.top() + result; 34 Stack.pop(); 35 } 36 return result; 37 }
浙公网安备 33010602011771号