package main
import (
"fmt"
)
func stringContainsValidParentheses(s string) bool {
var stack []rune
for _, ch := range s {
// Push the expected closing parenthesis onto the stack
if ch == '(' {
stack = append(stack, ')')
} else if ch == '{' {
stack = append(stack, '}')
} else if ch == '[' {
stack = append(stack, ']')
} else {
// Check if stack is empty or top element does not match the current character
if len(stack) == 0 || stack[len(stack)-1] != ch {
return false
}
// Pop from the stack
stack = stack[:len(stack)-1]
}
}
// Return true if the stack is empty, indicating valid parentheses
return len(stack) == 0
}
func main() {
fmt.Println(stringContainsValidParentheses("(){}[]"))
fmt.Println(stringContainsValidParentheses("([{}])"))
fmt.Println(stringContainsValidParentheses("(){}[]()(){}"))
fmt.Println(stringContainsValidParentheses("(]"))
fmt.Println(stringContainsValidParentheses("({[)]}"))
}
/*
run:
true
true
true
false
false
*/