leetcode刷题日记之有效的括号

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

这是一个典型的用栈的思想的题目,在解题过程中,我的思路是如下几步:

1.首先判断字符串的长度是否为空

2.如果不为空,获取字符串的长度(strlen()函数)并开辟一个动态的内存空间

3.逐个扫描字符串的元素,如果为左边的括号就将这个括号压进栈中,如果为右边的括号,解酒将栈顶元素弹出并判断是否与扫描到的右边括号匹配。

4.在扫描完所有元素时一定要释放内存空间;

bool isValid(char* s) {
    if(s == NULL)
        return false;
    int top = 0,i;
    char *stack = (char *)malloc(sizeof(char)*(strlen(s)+1));
    for(i=0;s[i]!='\0';i++)
    {
        if(s[i]=='(' || s[i]=='[' || s[i]=='{')
        {
            stack[++top] = s[i];
        }
        else if((s[i]==')'&& stack[top]=='(') || (s[i]==']' && stack[top]=='[') || (s[i]=='}' && stack[top]=='{'))
        {
            top--;
        }
        else
            return false;
    }
    if(stack != NULL)
    {
        free(stack);
        stack = NULL;
    }
    if(top == 0)
        return true;
    return false;
}

猜你喜欢

转载自www.cnblogs.com/whpl22-Blog/p/10539657.html