# Suppose we represent our file system by a string in the following manner:

# The string "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext" represents:

# dir
#     subdir1
#     subdir2
#         file.ext
# The directory dir contains an empty sub-directory subdir1 and a sub-directory subdir2 containing a file file.ext.

# The string "dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext" represents:

# dir
#     subdir1
#         file1.ext
#         subsubdir1
#     subdir2
#         subsubdir2
#             file2.ext
# The directory dir contains two sub-directories subdir1 and subdir2. subdir1 contains a
# file file1.ext and an empty second-level sub-directory subsubdir1. subdir2 contains a
# second-level sub-directory subsubdir2 containing a file file2.ext.

# We are interested in finding the longest (number of characters) absolute path to a
# file within our file system. For example, in the second example above, the longest
# absolute path is "dir/subdir2/subsubdir2/file2.ext", and its length is 32 (not including the double quotes).

# Given a string representing the file system in the above format, return the length
# of the longest absolute path to a file in the abstracted file system.
# 
# If there is no file in the system, return 0.

# Note:

# The name of a file contains at least a period and an extension.

# The name of a directory or sub-directory will not contain a period.


def longest_path(pathString):
    if not pathString:
        return 0

    currentDir = [None]
    longestPath = 0
    pathList = pathString.split('\n')
    for item in pathList:
        tabs = 0
        while item[tabs] == '\t': # calc tabs
            tabs += 1

        if tabs == len(currentDir):  # go one level deeper
            currentDir.append(None)  # make room for the new path item
        else:  # tabs < level, ascend
            currentDir = currentDir[:tabs + 1]

        currentDir[-1] = str.strip(item)
        if '.' in currentDir[-1]:  # path ends with a file
            longestPath = max(longestPath, len('/'.join(currentDir)))
    return longestPath


# Driver code
s = "dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"
result = longest_path(s)
print(result)

s = "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext"
result = longest_path(s)
print(result)

s = ""
result = longest_path(s)
print(result)

s = "file.ext"
result = longest_path(s)
print(result)

s = "dir\n\tfile.ext"
result = longest_path(s)
print(result)



