LeetCode_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".

  

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 < 1) return string("/");

        const char * str = path.c_str();

        char buffer[512];

        int  pos = 0,num;

        do{

            buffer[0] = '\0';

            num = sscanf(str + pos,"/%[^/]/",buffer);

            int size = strlen(buffer);

            if(size == 0 && num == 0)// case ://

                  pos++;

            else if( size == 1){    //case :/./

                if(buffer[0] != '.')

                {

                    tp.push_back(string(buffer));

                }

                pos+= 2;

            }else if(size == 2 && buffer[0] =='.' && buffer[1] == '.'){//case : /../

                if(!tp.empty())

                     tp.pop_back();

                pos+=3 ;

            }else if(size > 1){ //case :normal

                

                 tp.push_back(string(buffer));

                pos = pos + 1 + size;

            }

            

        }while(-1 != num && pos <len );



        len = tp.size();



        if(len < 1)

            res+= '/';

        for(int i = 0; i< len ; i++)

        {

            res+='/';

            res+=tp[i];

        }



        return res;    

    }

};

 

你可能感兴趣的:(LeetCode)