Leetcode 301 Solution

This article provides solution to leetcode question 301 (remove-invalid-parentheses)

https://leetcode.com/problems/remove-invalid-parentheses

Solution

class Solution {
public:
    bool isvalid(const string& s)
    {
        int cnt = 0;

        for (auto ch : s)
        {
            if (ch == '(')
                cnt++;
            else if (ch == ')')
                cnt--;

            if (cnt < 0)
                return false;
        }

        return cnt == 0;
    }
    vector<string> removeInvalidParentheses(string s) {
        queue<string> q;
        unordered_set<string> visited;
        vector<string> res;
        bool found = false;

        q.push(s);
        visited.insert(s);

        while (q.empty() == false)
        {
            auto str = q.front();
            q.pop();

            if (isvalid(str))
            {
                res.push_back(str);
                found = true;
            }

            if (found)
                continue;

            for (int i = 0; i < str.size(); i++)
            {
                if (str[i] == '(' || str[i] == ')')
                {
                    string next_str = str.substr(0, i) + str.substr(i + 1);

                    if (visited.find(next_str) != visited.end())
                        continue;

                    visited.insert(next_str);
                    q.push(next_str);
                }
            }
        }

        return res;
    }
};