Рубрики
Без рубрики

Летный код 20. Допустимые Круглые скобки

Решение + объяснение проблемы с LeetCode 20. Помеченный как java, stack.

public boolean isValid(String s) {
    if (s == null || s.length() == 0) {
        return true;
    }

    int ptr = 0;
    char[] map = new char[s.length()];

    for (char ch : s.toCharArray()) {
        switch (ch) {
            case '(':
            case '{':
            case '[':
                map[ptr++] = ch;
                break;
            case ')':
                if (ptr == 0 || map[--ptr] != '(')
                    return false;
                break;
            case '}':
                if (ptr == 0 || map[--ptr] != '{')
                    return false;
                break;
            case ']':
                if (ptr == 0 || map[--ptr] != '[')
                    return false;
                break;
        }
    }

    return ptr == 0;
}

Эта проблема может быть решена с помощью стека. Решение, предоставляемое LeetCode, использует класс Stack . Однако это может быть смоделировано с помощью массива. Сначала мы создаем пустой массив map , который имеет тот же размер, что и строка s . Затем мы перебираем каждый символ s и когда мы сталкиваемся с левой круглой скобкой, мы сохраняем круглую скобку в map в индексе ptr . Кроме того, мы увеличиваем ptr на единицу. (аналогично push in Stack ). Если мы сталкиваемся с правой круглой скобкой, мы проверяем, есть ли у правой круглой скобки соответствующая левая скобка, хранящаяся в ptr -1 в карте . Если нет, верните |/false . Наконец, мы проверяем, равен ли ptr 0 (аналогично пустому стеку ).

Временная сложность : O(n)

Дополнительное пространство : O(n)

Оригинал: “https://dev.to/algobot76/leetcode-20-valid-parentheses-1274”