题解:
class Solution {
public:
vector<string> split(string src, string delimeter) {
if (src.empty()) return {};
vector<string> ans;
int pos1 = 0, pos2 = src.find(delimeter);
while (pos2 != string::npos) {
ans.push_back(src.substr(pos1, pos2 - pos1));
pos1 = pos2 + delimeter.size();
pos2 = src.find(delimeter, pos1);
}
if (pos1 != src.size())
ans.push_back(src.substr(pos1));
return ans;
}
int lengthLongestPath(string input) {
vector<string> table = split(input, "\n");
std::unordered_map<int, int> level;
level[-1] = 0;
int res = 0;
for (int i = 0; i < table.size(); ++i) {
const std::string& line = table[i];
int le = line.find_last_of('\t') + 1;
int len = line.substr(le).size();
if (line.find('.') != std::string::npos) {
res = max(res, level[le-1] + len);
} else {
level[le] = level[le-1] + len + 1;
}
}
return res;
}
};