使用了一个map记录文件位置,o(n)的方案实现,没有出现额外的字符串匹配过程,4ms解决
func lengthLongestPath(input string) int {
flag := make(map[int]int)
tmp := 0
path := ""
str := ""
isFile := false
max := 0
flag[-1] = 0
// maxStr := ""
input += "\n"
for i := 0; i < len(input); i++ {
switch input[i] {
case '\n':
offset, ok := flag[tmp-1]
if !ok {
return -1
}
path = path[0:offset] + str
if !isFile {
path += "/"
} else {
if len(path) > max {
max = len(path)
// maxStr = path
}
isFile = false
}
flag[tmp] = len(path)
str = ""
tmp = 0
case '\t':
tmp++
case '.':
isFile = true
fallthrough
default:
str += string(input[i])
}
}
// println(maxStr, len(maxStr))
return max
}