LeetCode_Simplify Path

时间:2021-09-30 13:41:42
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".

  

class Solution {
public:
string simplifyPath(string path) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<string> tp;
string res;
int len = path.size();
if(len < ) return string("/");
const char * str = path.c_str();
char buffer[];
int pos = ,num;
do{
buffer[] = '\0';
num = sscanf(str + pos,"/%[^/]/",buffer);
int size = strlen(buffer);
if(size == && num == )// case ://
pos++;
else if( size == ){ //case :/./
if(buffer[] != '.')
{
tp.push_back(string(buffer));
}
pos+= ;
}else if(size == && buffer[] =='.' && buffer[] == '.'){//case : /../
if(!tp.empty())
tp.pop_back();
pos+= ;
}else if(size > ){ //case :normal tp.push_back(string(buffer));
pos = pos + + size;
} }while(- != num && pos <len ); len = tp.size(); if(len < )
res+= '/';
for(int i = ; i< len ; i++)
{
res+='/';
res+=tp[i];
} return res;
}
};