您的位置:首页 > 编程语言 > C语言/C++

leetcode_c++:栈:Simplify Path(071)

2016-07-20 16:11 411 查看
Given an absolute path for a file (Unix-style), simplify it.

For example,

path = “/home/”, => “/home”

path = “/a/./b/../../c/”, => “/c”

O(n)

#include <iostream>
#include <vector>
#include<cmath>
#include <algorithm>
#include <stack>
#include <string>
#include <sstream>

using namespace std;

class Solution {
private:

vector<string>& split(const string& s,char delim,vector<string>& elems){
stringstream ss(s);
string item;
while(getline(ss,item,delim)){
/*Extracts characters from is and stores them into str
* until the delimitation character delim is found*/
elems.push_back(item);
}
return  elems;
}

public:

vector<string> split(const string& s,char delim){
vector<string>  elems;
split(s,delim,elems);

return elems;
}
public:
string simplifyPath(string path) {

string result;
vector<string> elems=split(path,'/');

int ignor=0;
for(int i=elems.size()-1;i>=0;i--){
if(elems[i]==""||elems[i]=="."){
continue;
}
if(elems[i]==".."){
ignor++;
continue;
}
if(ignor>0){
ignor--;
continue;
}
if(result.size()==0){
result = "/"+elems[i];

}else{
result ="/"+elems[i]+result;
}
}

return result.size()?result:"/";

}
};

int main(int argc,char** argv){
Solution res;
string path("/a/./b/../../c/");

cout<<path<<" : "<<res.simplifyPath(path) <<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: