-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathValidParentheses.java
More file actions
106 lines (75 loc) · 2.36 KB
/
ValidParentheses.java
File metadata and controls
106 lines (75 loc) · 2.36 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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// https://leetcode.com/problems/valid-parentheses/
import java.util.ArrayList;
class ValidParentheses {
public static void main (String [] args){
String case1 = "{[]}";
String case2 = "{}]()()[]";
String case3 = "{}{}()()[}";
if (isValid(case1)){
System.out.println("Case1 pass");
}
if (!isValid(case2)){
System.out.println("Case2 pass");
}
if (!isValid(case3)){
System.out.println("Case3 pass");
}
}
public static boolean isValid(String s) {
// se crea la pila en donde se guardan los caracteres de apertura
ArrayList<Character> pila = new ArrayList<>();
Character caracterActual;
Character caracterActualOpuesto;
Character ultimoCaracterPila;
int pilaSize;
int indexUltimoCaractarPila;
for (int i = 0 ; i < s.length() ; i ++) {
caracterActual = s.charAt(i);
// comprobar si es un caracter de apertura
if ( isOpen(caracterActual) ){
pila.add(caracterActual);
continue;
}
pilaSize = pila.size();
if (pilaSize == 0) { // fuera D
return false;
}
indexUltimoCaractarPila = pilaSize-1;
// se obtine el ultimo elemento de la pila
ultimoCaracterPila = pila.get(indexUltimoCaractarPila);
pila.remove(indexUltimoCaractarPila);// fuera D
caracterActualOpuesto = obtenerCaracterOpuesto(caracterActual);
if ( caracterActualOpuesto != ultimoCaracterPila ) {
return false;
}
}
if (pila.size() != 0) { // fuera D
return false;
}
return true;
}
public static Character obtenerCaracterOpuesto (Character caracter) {
if (caracter == ')') {
return '(';
}
if (caracter == '}') {
return '{';
}
if (caracter == ']') {
return '[';
}
return '*';
}
public static boolean isOpen(Character caracter) {
if (caracter == '(') {
return true;
}
if (caracter == '{') {
return true;
}
if (caracter == '[') {
return true;
}
return false;
}
}