Lesson 7 question 1 Brackets

源地址

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);
                }
            }
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章