源地址
https://app.codility.com/programmers/lessons/7-stacks_and_queues/brackets/
Brackets(括號)
一個包含N個字符的字符串S,如果滿足如下條件中的一個,我們就說它是適當嵌套的:
- S爲空
- S 的形式爲"(U)" 或者 “[U]” 或者 “{U}” ,這裏的 U 是一個適當嵌套的字符串
- S 的形式爲 “VW” , V 和 W 都是適當嵌套的字符串
比如,字符串"{[()()]}" 是適當嵌套的,但是 “([)()]” 不是.
寫一個函數
class Solution {
public int solution(String S);
}
給定一個包含N個字符的字符串S,如果S是適當嵌套就返回1,否則返回0.
比如,字符串"{[()()]}" 返回1,但是 “([)()]” 返回0.
假定:
- N是範圍在 [0…200,000]的整數
- 字符串S只包含 “(”, “{”, “[”, “]”, “}” 和 “)”.
第一步
用stack來實現.順序往stack中放字符,如果連續兩個字符正好配對,那麼消去這兩個字符.最後如果stack爲空,那麼就是適當配對.否則就不是.
final static char LEFT1 = '(';
final static char RIGHT1 = ')';
final static char LEFT2 = '{';
final static char RIGHT2 = '}';
final static char LEFT3 = '[';
final static char RIGHT3 = ']';
public int solution(String S) {
Stacks s = new Stacks();
for (char c : S.toCharArray()) {
s.push(c);
}
return s.size() == 0 ? 1 : 0;
}
class Stacks {
ArrayList<Character> list = new ArrayList<Character>();
public int size() {
return list.size();
}
public char peek() {
return list.get(list.size() - 1);
}
public void pop() {
list.remove(list.size() - 1);
}
public void push(Character c) {
if (size() == 0) {
list.add(c);
} else {
char p = peek();
if ((p == LEFT1 && c == RIGHT1) || (p == LEFT2 && c == RIGHT2) || (p == LEFT3 && c == RIGHT3)) {
pop();
} else {
list.add(c);
}
}
}
}