模拟专题3 - leetcode481. Magical String/71. Simplify Path★

481. Magical String

题目描述

给定正整数N,返回神奇字符串S中前N个数字中的’1’。

例子

Input: 6
Output: 3

Explanation: The first 6 elements of magical string S is “12211” and it contains three 1’s, so return 3.

思想
可以根据原始S的结果和统计连续1,2的结果,相互推导
需要一个列表存储结果,需要一个指针指示当前group的位置
解法

class Solution(object):
    def magicalString(self, n):
        """
        :type n: int
        :rtype: int
        """
        arr = [1,2,2]
        idx = 2
        while len(arr) < n:
            arr += [3 - arr[-1]] * arr[idx]  # arr[idx]个
            idx += 1
        return arr[:n].count(1)

71. Simplify Path

题目描述

给定绝对路径,简化路径

例子

path = “/home/”, => “/home”
path = “/a/./b/…/…/c/”, => “/c”
path = “/a/…/…/b/…/c//.//”, => “/c”
path = “/a//bc/d//././/…”, => “/a/b/c”

unix系统风格下,".“表示当前目录,可以忽略;”…"表示上级目录

思想

有效字符入栈,遇到…就弹出一个栈顶元素,遇到.就无视。
特殊情况 - /…/

解法

class Solution(object):
    def simplifyPath(self, path):
        """
        :type path: str
        :rtype: str
        """
        stack = []
        path = path.split('/')
        for ss in path:
            if ss:  # 注意ss非空
                if ss == '..':
                    if stack:
                        stack.pop()
                elif ss != '.':    
                    stack.append(ss)
        return '/' + '/'.join(stack)

你可能感兴趣的:(Leetcode,神奇字符串)