题解 | #合法的括号字符串#

合法的括号字符串

https://www.nowcoder.com/practice/eceb50e041ec40bd93240b8b3b62d221

时间复杂度O(N), 空间复杂度O(1)。贪心思想:从左往右遍历,将所有的星号视作左括号,若此时左括号的数目仍然小于右括号,那么一定不成立。相似地再从右往左遍历一遍。最后若不为False, 则说明星号可以自适应转化得到True.

[C++ 代码]

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return bool布尔型
     */
    bool isValidString(string s) {
        int n = s.length();
        int left = 0, right = 0, star = 0;
        for(int i=0; i<n; ++i){
            if(s[i] == '(' )    ++left;
            if(s[i] == '*')     ++left;
            if(s[i] == ')')     ++right;
            if(left < right)    return false;
        }
        left = right = star = 0;
        for(int i=n-1; i>=0; --i){
            if(s[i] == ')' || s[i] == '*')  ++right;
            else if(s[i] == '(')    ++left;
            if(right < left)    return false;
        }
        return true;
        
    }
};

全部评论

相关推荐

11-08 17:36
诺瓦科技_HR
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务