在操作系统中,每个文件都有一个绝对路径。并且其最简化的形式是唯一的。对于Unix系列系统,绝对路径是从根路径/开始的,用正斜杠表示。一个句点.表示当前路径,两个句点..表示上一级路径。对于一个路径字符串,从左到右依次读。
下面的程序是用来简化Unix文件系统的路径字符串,使其达到最简化的程序,取出中间多余的/或者重复的层次进出。
思想:用一个栈来维护绝对路径中从根到文件的纯净的层次次序,去除重复的部分。
代码:
class Solution {
public:
string simplifyPath(string path) { //absolute path
stack<string> s;
int len = path.length();
int i = 0;
string tmp;
while(i < len)
{
//pass /
while(i < len && path[i] == '/')
i++;
// read directory-name
tmp.clear();
while(i < len && path[i] != '/')
{
tmp += path[i];
i++;
}
// get in or get out
if(tmp == "..")
{
if(!s.empty())
s.pop();
}
else if(tmp == ".")
continue;
else if(!tmp.empty())
{
s.push(tmp);
}
}
if(s.empty())
return string("/");
string result = "";
while(!s.empty())
{
result = "/" + s.top() + result;
s.pop();
}
return result;
}
};