王道算法题(其他)

74 阅读1分钟

实现栈的应用


括号匹配

bool isValid()
{
    stack<char> s;
    s.push('#'); //哨兵  专门针对因左右符号个数不同而引起的不匹配
    int len = str.length();
    for (int i = 0; i < len; i++)
    {
        if (str[i] == '(' || str[i] == '{' || str[i] == '[')
            s.push(str[i]);
        else if ((str[i] == ')' && s.top() == '(') || (str[i] == ']' && s.top() == '[') | (str[i] == '}' && s.top() == '{'))
            s.pop();
        else
            return false;
    }
    if (s.top() == '#')
        return true;
    return false;
}



判断进栈出栈序列是否合法

char str[] = "IOOOIOIO";
bool Legical(char *str)
{
    int j = 0, i = 0;
    while (str[i] != '\0')
    {
        if (str[i] == 'I')
            j++;
        else
            j--;
        i++;
        if (j < 0)
        {
            // cout << j;
            return false;
        }
    }
    return true;
}