-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy path1.check-balanced-parenthesis-solution.go
More file actions
88 lines (74 loc) · 1.35 KB
/
Copy path1.check-balanced-parenthesis-solution.go
File metadata and controls
88 lines (74 loc) · 1.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package main
import (
"fmt"
)
type Stack []interface{}
func (s *Stack) isEmpty() bool {
if len(*s) == 0 {
return true
}
return false
}
func (s *Stack) push(item interface{}) {
*s = append(*s, item)
}
func (s *Stack) pop() (interface{}, bool) {
if s.isEmpty() {
return "", false
} else {
index := len(*s) - 1
ele := (*s)[index]
*s = (*s)[:index]
return ele, true
}
}
func (s *Stack) peek() (interface{}, bool) {
if s.isEmpty() {
return "", false
} else {
index := len(*s) - 1
return (*s)[index], true
}
}
func checkBalancedParenthesis(str string) bool {
var st Stack
for _, v := range str {
if string(v) == "(" || string(v) == "{" || string(v) == "[" {
st.push(string(v))
} else if string(v) == ")" || string(v) == "}" || string(v) == "]" {
switch string(v) {
case ")":
top, flag := st.pop()
if !flag || top != "(" {
return false
}
break
case "}":
top, flag := st.pop()
if !flag || top != "{" {
return false
}
break
case "]":
top, flag := st.pop()
if !flag || top != "[" {
return false
}
break
default:
return false
}
}
}
return st.isEmpty()
}
func main() {
var str string
fmt.Print("Enter the string for check ")
_, _ = fmt.Scan(&str)
if checkBalancedParenthesis(str) {
fmt.Println("IsBalanced")
} else {
fmt.Println("NotBalanced")
}
}