LeetCode#71. Simplify Path(C++)

  • 题目:给出一个Unix系统的绝对目录路径,返回简化后的路径。例如:
    path = “/home/”, => “/home”
    path = “/a/./b/../../c/”, => “/c”
  • 难度:Medium
  • 思路:将输入的string以“/”分割,遍历分割后的元素中,如果为“.”,则继续;如果为“..”并且前面的元素中包含目录,则弹出栈顶元素,否则当前元素不为”..”时,就将该元素压入栈。
  • 代码:
    C++版
class Solution {
public:
    string simplifyPath(string path) {
        string res;
        string tmp;
        vector<string> vec;
        stringstream ss(path);
        while(getline(ss,tmp,'/')){
            if(tmp == "" or tmp == ".") continue;
            if(tmp == ".." and !vec.empty()){
                vec.pop_back();
            }else if(tmp != ".."){
                vec.push_back(tmp);
            }
        }
        for(string str:vec){
            res += "/" + str;
        }
        return res.empty()?"/":res;
    }
};

Java版

class Solution {
    public String simplifyPath(String path) {
        String[] res = path.split("/");
        LinkedList<String> stack = new LinkedList<String>();
        //System.out.print(res);
        for(String str:res){

            if((str.equals(".")) || (str.equals(""))){
                //System.out.println(str);
                continue;
            }
            if((str.equals("..")) && (!stack.isEmpty())){
                stack.pollLast();
            }else if(!str.equals("..")){
                stack.offer(str);
            }
        }
        String result = "";

        while(!stack.isEmpty()){
            result += "/" + stack.pollFirst();
        }
        return result.equals("")?"/":result;
    }
}

猜你喜欢

转载自blog.csdn.net/u012559634/article/details/79599217
今日推荐