题意:给出先序遍历的所有文件路径,求出其中字符串长度最大的文件路径。
思路:问题的关键是记录从根目录到文件的路径长度,这里使用了递推的方式,记录到叶子结点的路径上,每一个 结点的字符串长度。
class Solution {
public:
int lengthLongestPath(string input) {
vector<int> level(200, 0);
int templevel = 0;
string temps;
int re = 0;
for(int i = 0; i < input.length(); ++ i) {
templevel = 0;
bool isFile = false;
temps = "";
while(input[i] != '\n' && i < input.length()) {
if(input[i] == '\t') templevel ++;
else temps += input[i];
if(input[i] == '.') isFile = true;
i ++;
}
//cout << templevel << " " << temps << endl;
//initialize the root file
if(templevel == 0) {
level[templevel] = temps.length();
if(isFile) re = temps.length();
continue;
}
//cout << "isFile" << isFile << endl;
if(isFile) {
if(re < level[templevel - 1] + temps.length() + 1)
re = level[templevel - 1] + temps.length() + 1;
// cout << level[templevel - 1] + temps.length() + 1;
}
else {
level[templevel] = level[templevel - 1] + temps.length() + 1;
//cout << level[templevel] << endl;
}
}
return re;
}
};
转义字符虽然显示两个字符,但是实际只占一个字符的存储空间。
这题本来想用并查集做,将所有路径都记录下来,但是只要最大值的话,没有必要全部记录。这题本质上还是一道搜索题。