码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] Simplify Path(可以不用看)

时间:2014-08-18 17:53:22      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   strong   文件   for   ar   

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

注意以下几点:input"/.", output"/"

                    input"/..", output"/"

                    input"/...", output"/..."即“...”、“....”等是有效的文件名

class Solution {
public:
    string simplifyPath(string path) { 
        if(path == "/" || path=="")
            return path;
        string result(1,path[0]);
        int len = path.size();
        if(path[len-1]!=/){
            path.push_back(/);
            len++;
        }

        int j=0,start;
        stack<int> sstart;
        for(int i = 1;i<len;){
            if(path[i] != / && path[i] != .){//if(1)
                
                while(i<len && path[i]!=/){
                    result.push_back(path[i++]);
                    j++;
                }
                int flag = j;
                while(flag>=0 && result[flag]!=/){
                    flag--;
                }
                sstart.push(flag+1);
                if(i<len-1 && path[i]==/){
                    result.push_back(path[i++]);
                    j++;
                }else if(i == len-1 && path[i]==/){
                    return result; 
                }    
            }else{
                if(path[i]==/ && result[j]==/)
                    i++;
                else if(i<len-1 && path[i]==. && path[i+1]==/){
                    i=i+2;
                }else if(i<len-2 && path[i]==. && path[i+1]==.&& path[i+2]==/){
                    i = i+3;
                    if(result.size() == 1)
                        continue;
                    else{
                        if(result[j]==/){
                            start = sstart.top();
                            sstart.pop();
                            result.erase(result.begin()+start,result.end());
                            j = start-1;
                        }else{      //  "/.../""output"/.../"
                            int flag = j;
                            while(flag>=0 && result[flag]!=/){
                                flag--;
                            }
                            sstart.push(flag+1);
                            result.push_back(path[i-3]);
                            result.push_back(path[i-2]);
                            if(i-1<len-1 && path[i-1]==/){
                                result.push_back(path[i-1]);
                                j+=3;
                            }else if(i-1 == len-1 && path[i-1]==/){
                                return result; 
                            }    
                        }  
                    }
                }else{
                    result.push_back(path[i++]);
                    j++;
                }            
            }//end if(1)
        }//end for
       while(result[j]==/ && result.size()!=1){
             result = result.substr(0,j);
             j--;
         }
        return result;          
    }//end func
};

 

[LeetCode] Simplify Path(可以不用看),布布扣,bubuko.com

[LeetCode] Simplify Path(可以不用看)

标签:style   blog   color   io   strong   文件   for   ar   

原文地址:http://www.cnblogs.com/Xylophone/p/3919930.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!