69 leetcode - Simplify Path

来源:互联网 发布:网络找人 编辑:程序博客网 时间:2024/05/14 03:16

注意,在这个题里面,...也视为一个目录…,还有可能出现多个/,如////

#!/usr/bin/python# -*- coding: utf-8 -*-'''Simplify PathGiven an absolute path for a file (Unix-style), simplify it.For example,path = "/home/", => "/home"path = "/a/./b/../../c/", => "/c"'''#解决方法栈,题不难,情况很多...class Solution(object):    def simplifyPath(self, path):        """        :type path: str        :rtype: str        """        ret = []        index = 0        length = len(path)        while index < length:            if path[index] == '.':                 if (index + 1) < length:                    if path[index + 1] == '/':                        index += 2                    elif path[index + 1] == '.':                        if index + 2 < length:                            if path[index + 2] == '/':                                times = 0                                while ret and times < 2:                                    if ret.pop() == '/':                                        times += 1                                ret.append('/')                                index += 3                            else:                                ret.append(path[index])                                ret.append(path[index + 1])                                ret.append(path[index + 2])                                index += 3                        else:                            times = 0                            while ret and times < 2:                                if ret.pop() == '/':                                    times += 1                            ret.append('/')                            index += 3                    else:                        ret.append(path[index])                        ret.append(path[index + 1])                        index += 2                else:                    break            else:                if not (ret and ret[-1] == '/' and path[index] == '/'):                    ret.append(path[index])                index += 1        while ret and ret[-1] == '/':            ret.pop()        if not ret:            return '/'        return ''.join(ret)if __name__ == "__main__":    s = Solution()    print s.simplifyPath("///eHx/..")    print s.simplifyPath("/...")    print s.simplifyPath("/.../")    print s.simplifyPath("/.")    print s.simplifyPath("/../")    print s.simplifyPath("/home//foo/")    print s.simplifyPath("/home/foo/.ssh/../.ssh2/authorized_keys")    print s.simplifyPath("/home//foo/")    print s.simplifyPath("/..hidden")    print s.simplifyPath("/home/..")    print s.simplifyPath("/home/./././")    print s.simplifyPath("/home/")    print s.simplifyPath("/a/./b/../../c/")

还可以在字符串后面添加一个’/’保证字符串以’/’结尾,这样就会简化很多.

0 0
原创粉丝点击