LeetCode-in-Java

1003. Check If Word Is Valid After Substitutions

Medium

Given a string s, determine if it is valid.

A string s is valid if, starting with an empty string t = "", you can transform t into s after performing the following operation any number of times:

Return true if s is a valid string, otherwise, return false.

Example 1:

Input: s = “aabcbc”

Output: true

Explanation: “” -> “abc” -> “aabcbc” Thus, “aabcbc” is valid.

Example 2:

Input: s = “abcabcababcc”

Output: true

Explanation: “” -> “abc” -> “abcabc” -> “abcabcabc” -> “abcabcababcc” Thus, “abcabcababcc” is valid.

Example 3:

Input: s = “abccba”

Output: false

Explanation: It is impossible to get “abccba” using the operation.

Constraints:

Solution

import java.util.ArrayDeque;
import java.util.Deque;

public class Solution {
    public boolean isValid(String s) {
        Deque<Character> stack = new ArrayDeque<>();
        for (char c : s.toCharArray()) {
            if (c == 'c') {
                if (stack.isEmpty() || stack.pop() != 'b') {
                    return false;
                }
                if (stack.isEmpty() || stack.pop() != 'a') {
                    return false;
                }
            } else {
                stack.push(c);
            }
        }
        return stack.isEmpty();
    }
}