自学内容网 自学内容网

力扣5-有效的括号

一.题目

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"

输出:true

示例 2:

输入:s = "()[]{}"

输出:true

示例 3:

输入:s = "(]"

输出:false

示例 4:

输入:s = "([])"

输出:true

二.代码

bool isValid(char* s) 
{  
    char a[100000]="\0";
    if((s[0]==')')||(s[0]=='}')||(s[0]==']'))
    {
        return false;
    }
    int i,j=0;
    for(i=0;i<strlen(s);i++)
    {
        if((s[i]=='(')||(s[i]=='{')||(s[i]=='['))
        {
            a[j]=s[i];
            j++;
        }
        if((s[i]==')')||(s[i]=='}')||(s[i]==']'))
        {
            if(j>0)
            {
                j--;
            }
            else
            {
                return false;
            }
            switch(s[i])
            {
                case ')':
                {
                    if(a[j]=='(')
                    {
                        a[j]='\0';
                    }
                    else
                    {
                        return false;
                    }
                    break;
                }
                case '}':
                {
                    if(a[j]=='{')
                    {
                        a[j]='\0';
                    }
                    else
                    {
                        return false;
                    }
                    break;
                }
                case ']':
                {
                    if(a[j]=='[')
                    {
                        a[j]='\0';
                    }
                    else
                    {
                        return false;
                    }
                    break;
                }
            }
        }
        continue;
    }
    if(a[0]!='\0')
    {
        return false;
    }
    else
    {
        return true;
    }
}

三.补全代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


bool isValid(char* s)
{
    int len = strlen(s);
    char* a = (char*)malloc(len + 1);
    if (a == NULL) {
        // 处理内存分配失败的情况
        perror("malloc failed");
        exit(EXIT_FAILURE);
    }
    a[0] = '\0';
    if ((s[0] == ')') || (s[0] == '}') || (s[0] == ']'))
    {
        free(a);
        return false;
    }
    int i, j = 0;
    for (i = 0; i < len; i++)
    {
        if ((s[i] == '(') || (s[i] == '{') || (s[i] == '['))
        {
            j++;
            a[j - 1] = s[i];
        }
        if ((s[i] == ')') || (s[i] == '}') || (s[i] == ']'))
        {
            if (j > 0)
            {
                j--;
                switch (s[i])
                {
                case ')':
                    if (a[j] == '(')
                    {
                        a[j] = '\0';
                    }
                    else
                    {
                        free(a);
                        return false;
                    }
                    break;
                case '}':
                    if (a[j] == '{')
                    {
                        a[j] = '\0';
                    }
                    else
                    {
                        free(a);
                        return false;
                    }
                    break;
                case ']':
                    if (a[j] == '[')
                    {
                        a[j] = '\0';
                    }
                    else
                    {
                        free(a);
                        return false;
                    }
                    break;
                }
            }
            else
            {
                free(a);
                return false;
            }
        }
    }
    bool valid = (a[0] == '\0');
    free(a);
    return valid;
}


int main() {
    char* str = "()[]{}";
    if (isValid(str)) {
        printf("Valid\n");
    }
    else {
        printf("Invalid\n");
    }
    return 0;
}


原文地址:https://blog.csdn.net/2303_79462608/article/details/145134787

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!