개발/알고리즘
Codility 18번 Brackets
룬아님
2019. 9. 2. 20:43
Brackets
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:
class Solution { public int solution(String 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 ")".
Copyright 2009–2019 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.
import java.util.*;
class Solution {
public int solution(String S) {
Stack<Character> st = new Stack<Character>();
for (int i = 0; i < S.length(); i++) {
if (S.charAt(i) == '(' || S.charAt(i) == '[' || S.charAt(i) == '{') {
st.push(S.charAt(i));
} else if (S.charAt(i) == ')') {
if (st.size() > 0) {
if (st.pop() != '(') {
return 0;
}
} else {
return 0;
}
} else if (S.charAt(i) == ']') {
if (st.size() > 0) {
if (st.pop() != '[') {
return 0;
}
} else {
return 0;
}
} else if (S.charAt(i) == '}') {
if (st.size() > 0) {
if (st.pop() != '{') {
return 0;
}
} else {
return 0;
}
}
}
if (st.size() > 0) {
return 0;
} else {
return 1;
}
}
}
반응형