文理のこうさてん

人文科学と自然科学のこうさてんを目指していきたい。

LeetCode学習メモ: 20. Valid Parentheses

昨年からコンピュータサイエンスの自己学習を始めていて、leetcodeやらrecursionやらudemyに取り組んでいる。インプットは継続的に行なっているのだが、アウトプットの機会がほぼなく、自分の中で腹落ちして理解するために学習ログを残すこととする。

概要

Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

An input string is valid if:

Open brackets must be closed by the same type of brackets. Open brackets must be closed in the correct order.

引用元: https://leetcode.com/problems/valid-parentheses/

方針

stackとhashmapを復習できる良問。 事前に「閉じる方のbracket」をkeyとして、「始まる方のbracket」をvalueとしたhashmapを用意する。 また、stackを用意して、stackの中にcharactersをpushしていく。

givenされたcharactersを展開して、「閉じる方のbracket」が出てきたとき、stackからpopした値が「始まる方のbracket」であればTrue、そうでなければFalseを返す。

コード

def isParenthesesValid(characters):
    stack = []
    hashmap = {")": "(", "}": "{", "]": "["}

    for c in characters:
        if c in hashmap:
            top_element = stack.pop() if stack else ''
            if top_element != hashmap[c]:
                return False
        else: stack.append(c)
    return True