题目分析
给定一个字符串,表示文件系统的目录结构。统计该目录结构中的一个文件的绝对路径的最大长度。
解题思路
利用\n来分割文件夹和文件名,利用\t来统计此时文件夹或文件对应的层数,然后利用哈希表来建立深度和当前深度的绝对路径长度之间的映射。
实现程序
int lengthLongestPath(string input)
{
int result = 0;
int size = input.size();
int level = 0;
map<int, int> mp;
mp.insert(make_pair(0, 0));
for (int i = 0; i < size; i++)
{
int start = i;
// 用于统计文件夹或文件名长度
while (i < size && input[i] != '\n' && input[i] != '\t')
i++;
if (i >= size || input[i] == '\n')
{
// 分割文件夹名和文件名
string t = input.substr(start, i - start);
// 包含点,则说明是文件,此时更新长度
if (t.find('.') != string::npos)
{
result = max(result, mp[level] + (int)t.size());
}
// 不包含点,则说明是文件夹,此时记录深度和长度
else
{
level++;
mp[level] = mp[level - 1] + t.size() + 1;
}
level = 0;
}
// 统计对应的层次
else
{
level++;
}
}
return result;
}