71. Simplify Path

原创 2016年05月30日 14:35:47

Given an absolute path for a file (Unix-style), simplify it.

For example,
path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"

click to show corner cases.

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) {
		stack<string> mystack;

		int p = 0;
		while (path[p] == '/'){
			p++;
		}
		if (p == path.size())
			return "/";
		path = path.substr(p);

		string s = spilt(path, '/');
		while (!s.empty()){
			if (s.compare(".") == 0){
				//do nothing
				
			}
			else if (s.compare("..") == 0){
				if (!mystack.empty())
					mystack.pop();
			}
			else
				mystack.push(s);

			int p = 0;
			while (path[p] == '/'){
				p++;
			}
			path = path.substr(p);
			s = spilt(path, '/');
		}
		if (mystack.empty()){
			return "/";
		}
		vector<string> simp(mystack.size());
		for (int i = 0; i < simp.size(); i++){
			simp[i] = mystack.top();
			mystack.pop();
		}
		string res;
		for (int i = simp.size()-1; i >= 0; i--){
			res += "/" + simp[i];
		}
		return res;
	}
	string spilt(string& path, char ch){
		string s;
		int i;
		int size = path.size();
		for (i = 0; i < path.size(); i++){
			char c = path[i];
			if (c == ch){
				s = path.substr(0, i);
				path = path.substr(i + 1);
				break;
			}
		}
		if (i == size){
			s = path;
			path.clear();
		}
		return s;
	}
};







版权声明:本文为博主原创文章,未经博主允许不得转载。

71. Simplify Path (简化路径)

Given an absolute path for a file (Unix-style), simplify it.For example, path = “/home/”, => “/home...
  • NichChen
  • NichChen
  • 2017年11月06日 11:49
  • 33

Simplify Path问题及解法

问题描述: Given an absolute path for a file (Unix-style), simplify it. 示例: path = "/home/", =...
  • u011809767
  • u011809767
  • 2017年07月30日 15:32
  • 68

leetcode 71. Simplify Path C++的stringstream分割字符串的一个很好地例子

For example, path = “/home/”, => “/home” path = “/a/./b/../../c/”, => “/c” click to show corner c...
  • JackZhang_123
  • JackZhang_123
  • 2017年09月10日 20:47
  • 58

[LeetCode]—Simplify Path 简化路径表达式

Simplify Path   Given an absolute path for a file (Unix-style), simplify it. For example,...
  • SUN20082567
  • SUN20082567
  • 2014年07月05日 22:40
  • 430

Spark源码--逻辑计划优化之表达式简化

一、常量合并(Constant Folding)二、简化过滤器 (Simlify Filters)三、简化Cast (Simplify Casts)四、简化大小写转化表达式 (Simplify Cas...
  • wusuopuBUPT
  • wusuopuBUPT
  • 2017年07月26日 19:17
  • 341

android反混淆工具

安装:步骤一. 安装Smali / Baksmali我确定如果你是安卓逆向精英,那你的路径中肯定已经有smali和baksmali了。步骤二. 安装安卓 SDK / ADB确保你的路径中有adb。步骤...
  • xxl6097
  • xxl6097
  • 2016年01月26日 17:36
  • 2398

71. 数值的整数次方

题目:实现函数double Power(double base, int exponent),求base的exponent次方。不需要考虑溢出。 分析:这是一道看起来很简单的问题。可能有不少的人...
  • MasaWong
  • MasaWong
  • 2013年09月23日 16:01
  • 306

71. 读懂人性

读懂人性         除了最小的项目开发以外,人们都要与其他人合作。除了最抽象的领域以外,人们都需要其他人写软件支持其目标。人和人一起编写软件,这是人与人的事。不幸的是,给程序员关于如何与他们为...
  • aoelover
  • aoelover
  • 2013年12月02日 23:17
  • 377

71. 尽早刷新文档的输出

12.1 刷新文档的头部输出 12.2 输出缓存 12.3. 块编码 12.4 刷新输出和 Gzip 压缩 12.5 其他障碍 12.6 刷新...
  • enlyhua
  • enlyhua
  • 2016年11月04日 20:58
  • 156

ArrayList源代码分析

本源代码来自JDK1.8  与1.7、1.6 略有不同 1 ArrayList中的属性 1 初始容量 初始大小为10 /** * Shared empty array instance ...
  • u010723709
  • u010723709
  • 2015年05月11日 19:18
  • 1314
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:71. Simplify Path
举报原因:
原因补充:

(最多只允许输入30个字)