diff --git a/Valid Parentheses/memo.md b/Valid Parentheses/memo.md new file mode 100644 index 0000000..e2c9382 --- /dev/null +++ b/Valid Parentheses/memo.md @@ -0,0 +1,16 @@ +# step1 + +どこかで同じ問題をやっていた? +記憶があって stack に積まれた最後の閉じ括弧を対応するペアと比較する方法がすっと出てきた。 + +# step2 + +せっかくなのでナイーブな方法を考えてみた。 +全部 replace すればいいかという安易な考えでコーディングしてみた。 +~~Brute Force で解いてみても計算量は O(N) なので悪くはないかなとは思った。~~(正規表現でマッチングしているのでもちろん計算量がアルゴリズムの選択肢になるとは思っていないです。) + +追記: 時間計算量は、最悪で O(N) の処理が O(N/2) 回ループするので、 O(N^2)になりそうと指摘いただきました。 + +## step3 + +同じようにコーディングをした。step1から変わっていない。改善を考えるのが苦手かもしれない。 diff --git a/Valid Parentheses/step1.py b/Valid Parentheses/step1.py new file mode 100644 index 0000000..3db4a6e --- /dev/null +++ b/Valid Parentheses/step1.py @@ -0,0 +1,17 @@ +class Solution: + def isValid(self, s: str) -> bool: + stack = [] + bracket_pairs = { ")": "(", "]": "[", "}": "{"} + + for char in s: + if char in bracket_pairs: + if len(stack) > 0 and stack[-1] == bracket_pairs[char]: + stack.pop() + else: + return False + else: + stack.append(char) + + return len(stack) == 0 + + diff --git a/Valid Parentheses/step2-brute-force.py b/Valid Parentheses/step2-brute-force.py new file mode 100644 index 0000000..aec7783 --- /dev/null +++ b/Valid Parentheses/step2-brute-force.py @@ -0,0 +1,9 @@ +class Solution: + def isValid(self, s: str) -> bool: + while "()" in s or "{}" in s or "[]" in s: + s = s.replace("()", "") + s = s.replace("{}", "") + s = s.replace("[]", "") + + return s == "" + diff --git a/Valid Parentheses/step2-using-stack.py b/Valid Parentheses/step2-using-stack.py new file mode 100644 index 0000000..fc4cc81 --- /dev/null +++ b/Valid Parentheses/step2-using-stack.py @@ -0,0 +1,15 @@ +class Solution: + def isValid(self, s: str) -> bool: + stack = [] + bracket_pairs = { ")": "(", "]": "[", "}": "{"} + + for char in s: + if char in bracket_pairs: + if len(stack) > 0 and stack[-1] == bracket_pairs[char]: + stack.pop() + else: + return False + else: + stack.append(char) + + return len(stack) == 0 diff --git a/Valid Parentheses/step3-brute-force.py b/Valid Parentheses/step3-brute-force.py new file mode 100644 index 0000000..fe1340c --- /dev/null +++ b/Valid Parentheses/step3-brute-force.py @@ -0,0 +1,8 @@ +class Solution: + def isValid(self, s: str) -> bool: + while "()" in s or "{}" in s or "[]" in s: + s = s.replace("()", "") + s = s.replace("{}", "") + s = s.replace("[]", "") + + return s == "" diff --git a/Valid Parentheses/step3-using-stack.py b/Valid Parentheses/step3-using-stack.py new file mode 100644 index 0000000..4853a15 --- /dev/null +++ b/Valid Parentheses/step3-using-stack.py @@ -0,0 +1,16 @@ +class Solution: + def isValid(self, s: str) -> bool: + stack = [] + bracket_pairs = { "}": "{", "]": "[", ")": "("} + + for char in s: + if char in bracket_pairs: + if len(stack) > 0 and stack[-1] == bracket_pairs[char]: + stack.pop() + else: + return False + else: + stack.append(char) + + return stack == [] + diff --git a/Valid Parentheses/step4-using-bruteforce.py b/Valid Parentheses/step4-using-bruteforce.py new file mode 100644 index 0000000..67f7a32 --- /dev/null +++ b/Valid Parentheses/step4-using-bruteforce.py @@ -0,0 +1,7 @@ +class Solution: + def isValid(self, s: str) -> bool: + while "()" in s or "{}" in s or "[]" in s: + s = s.replace("()", "") + s = s.replace("{}", "") + s = s.replace("[]", "") + return not s diff --git a/Valid Parentheses/step4-using-stack.py b/Valid Parentheses/step4-using-stack.py new file mode 100644 index 0000000..2599de7 --- /dev/null +++ b/Valid Parentheses/step4-using-stack.py @@ -0,0 +1,12 @@ +class Solution: + def isValid(self, s: str) -> bool: + stack = [] + opening_to_closing = { "(": ")", "{": "}", "[": "]"} + for bracket in s: + if bracket in opening_to_closing: + stack.append(opening_to_closing[bracket]) + continue + else: + if not stack or bracket != stack.pop(): + return False + return not stack