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)
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; }
相关文章推荐
- HDU 3652 B-number (数位DP)
- UVA 10025-The ? 1 ? 2 ? ... ? n = k problem
- C++——string的使用
- 收集一些C++ online test的网站
- HDU 3555 Bomb (数位DP)
- rand()与srand()函数的使用
- 在C语言中除法运算为什么没有小数部分?
- C++虚函数
- 94. Binary Tree Inorder Traversal
- c++ primer学习(二)string, vector, array
- C++设计语言三大难点
- C语言--二维数组与指针浅谈
- C++中类的组合与构造函数
- <C++略识>之浅拷贝与深拷贝
- C++ vector用法初记
- C语言实现队列
- C语言实现栈
- c++11中的线程、锁和条件变量
- Cpp环境【OpenJudge3344】【Vijos2874】冷血格斗场
- c语言链表初始化