时间复杂度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;
        
    }
};