-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBrackets
More file actions
77 lines (53 loc) · 1.82 KB
/
Brackets
File metadata and controls
77 lines (53 loc) · 1.82 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
A string S consisting of N characters is considered to be properly nested if any of the following conditions is true:
S is empty;
S has the form "(U)" or "[U]" or "{U}" where U is a properly nested string;
S has the form "VW" where V and W are properly nested strings.
For example, the string "{[()()]}" is properly nested but "([)()]" is not.
Write a function:
function solution($S);
that, given a string S consisting of N characters, returns 1 if S is properly nested and 0 otherwise.
For example, given S = "{[()()]}", the function should return 1 and given S = "([)()]", the function should return 0, as explained above.
Write an efficient algorithm for the following assumptions:
N is an integer within the range [0..200,000];
string S consists only of the following characters: "(", "{", "[", "]", "}" and/or ")".
************************************** SOLUTION ******************************************
function solution($S)
{
$string = $S;
$stack = new SplStack();
$length = strlen($string);
if ($length == 0) {
return 1;
}
if ($length < 0 || $length > 200000) {
return 0;
}
for ($i = 0; $i < $length; $i++) {
$chr = substr($string, $i, 1);
if ($chr == "(" ||
$chr == "{" ||
$chr == "["
) {
$stack->push($chr);
}
if ($chr == ")" ||
$chr == "}" ||
$chr == "]"
) {
if ($stack->isEmpty()) {
return 0;
}
$stored = $stack->pop();
if (($stored == "{" && $chr != "}") ||
($stored == "(" && $chr != ")") ||
($stored == "[" && $chr != "]")
) {
return 0;
}
}
}
if (!$stack->isEmpty()) {
return 0;
}
return 1;
}