valid parens

main
Jason Staten 2 years ago
parent 6007c0dd33
commit e357d81606

@ -0,0 +1,36 @@
20. Valid Parentheses
Easy
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.
Every close bracket has a corresponding open bracket of the same type.
Example 1:
Input: s = "()"
Output: true
Example 2:
Input: s = "()[]{}"
Output: true
Example 3:
Input: s = "(]"
Output: false
Constraints:
1 <= s.length <= 104
s consists of parentheses only '()[]{}'.

@ -0,0 +1,66 @@
package validparens
type stack struct {
store []rune
}
func (s *stack) Push(r rune) {
s.store = append(s.store, r)
}
func (s *stack) Pop() rune {
res := s.store[len(s.store)-1]
s.store = s.store[:len(s.store)-1]
return res
}
func (s *stack) Length() int {
return len(s.store)
}
func (s *stack) OnTop(r rune) bool {
if s.Length() == 0 {
return false
}
return s.store[len(s.store)-1] == r
}
func NewStack() stack {
store := make([]rune, 0)
return stack{
store: store,
}
}
func isValid(s string) bool {
history := NewStack()
for _, r := range s {
switch r {
case '{', '[', '(':
history.Push(r)
case ')':
if !history.OnTop('(') {
return false
}
history.Pop()
case ']':
if !history.OnTop('[') {
return false
}
history.Pop()
case '}':
if !history.OnTop('{') {
return false
}
history.Pop()
}
}
return history.Length() == 0
}
func IsValid(s string) bool {
return isValid(s)
}

@ -0,0 +1,22 @@
package validparens_test
import (
"testing"
"git.jxs.me/leetgo/validparens"
"github.com/stretchr/testify/require"
)
func TestExamples(t *testing.T) {
cases := map[string]bool{
"": true,
"(": false,
"()": true,
"[{()}]": true,
"[(])": false,
}
for input, expected := range cases {
require.Equal(t, expected, validparens.IsValid(input))
}
}
Loading…
Cancel
Save