Leetcode71: Simplify Path

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

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

题意:

给出一个unix的完全路径,然后简化这个路径。主要的就是 /.. 表示返回上级目录, /. 表示在当前目录。

思路:

因为要是返回上级目录,就是退出当前目录,很容易联想到栈的性质。所以用栈存储访问的目录的顺序。在扫描给的路径的过程中,注意一下 /.. 和 /. 两种情况即可。还有最后一位不一定是'/',所以也要判断一下。提示里面有要求注意 /../ 的这种情况,需要在pop前判断一个栈是否为空即可。

代码:

class Solution {
public:
 string simplifyPath(string path){     
	stack<string> res;
	int len=path.size();
	string s="";
	bool canAdd=true;
	for(int i=0; i<len; i++){
		if(path[i]=='.'){
			if(i+1<len && path[i+1]=='/' && i>=1 && path[i-1]=='/'){
			}
			else if(i+2<len && path[i+2]=='/' && i>=1 && path[i-1]=='/'){
				if(!res.empty()) res.pop();
				i++;
			}
			else s+=path[i];
		}
		else if(path[i]!='/') s+=path[i];
		else{
			if(s!="") res.push(s);
			s="";
		}	
	}
	if(path[len-1]!='/'){
		if(len-2>=0 && path[len-1]=='.' && path[len-2]=='/'){
		}
		else if(len-3>=0 && path[len-1]=='.' && path[len-2]=='.' && path[len-3]=='/'){
			if(!res.empty()) res.pop();
		}
		else res.push(s);
	}
	
	string ans;
	string str;
	if(res.empty()) return "/";
	while(!res.empty()){
		str=res.top();
		res.pop();
		reverse(str.begin(), str.end());
		str+='/';
		ans+=str;
	}
	reverse(ans.begin(), ans.end());
	return ans;
}
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值