zoukankan      html  css  js  c++  java
  • 20. 有效的括号

    20. 有效的括号

    1、题目介绍

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

    有效字符串需满足:

    左括号必须用相同类型的右括号闭合。
    左括号必须以正确的顺序闭合。
    注意空字符串可被认为是有效字符串。

    试题链接:https://leetcode-cn.com/problems/valid-parentheses/

    2、使用java语言进行解答

    2.1、暴力做法—无限替换

        public static boolean isValid(String s) {
            String out;
            while (true) {
                out = s;
                s = s.replace("()","");
                s = s.replace("{}","");
                s = s.replace("[]","");
                if(s.isEmpty()) {
                    return true;
                }
                if(s.equals(out)) {
                    return false;
                }
            }
        }
    

    算法效果:

    可以看出,暴力替换的算法在时间和空间上都是效率较低的。

    2.2、使用栈

        public static boolean isValid(String s) {
            Stack<Character> stack = new Stack();
            char[] arr = s.toCharArray();
            for(int i = 0;i < arr.length;i++) {
                if(arr[i] == '(' || arr[i] == '[' || arr[i] == '{') {
                    stack.push(arr[i]);
                    continue;
                }
                if(!stack.isEmpty()) {
                    if((arr[i] == ')' && stack.peek() == '(') ||
                            (arr[i] == ']' && stack.peek() == '[') ||
                            (arr[i] == '}' && stack.peek() == '{')
                    ) {
                        stack.pop();
                    }else {
                        return false;
                    }
                }else {
                    return false;
                }
            }
    
            if(stack.isEmpty()){
                return true;
            }else {
                return false;
            }
        }
    

    算法效果:

    3、使用C语言来进行解答

    //链表结点
    typedef struct LinkNode {
        char data;
        struct LinkNode* next;
    }LinkNode;
    
    //栈结构体
    typedef struct LinkList {
        LinkNode* head;
        int size;
    }LinkStack;
    
    //1,初始化函数
    LinkStack* Init_LinkStack() {
        LinkStack* stack = (LinkStack*)malloc(sizeof(LinkStack));
        stack->size = 0;
        //头节点,不保存数据信息
        stack->head = (LinkNode*)malloc(sizeof(LinkNode));
        stack->head->data = '';
        stack->head->next = NULL;
        return stack;
    }
    //2,入栈
    void Push_LinkStack(LinkStack* stack, char data) {
        LinkNode* newNode = (LinkNode*)malloc(sizeof(LinkNode));
        newNode->data = data;
        newNode->next = stack->head->next;
        stack->head->next = newNode;
        stack->size++;
    }
    //3,出栈
    char Pop_LinkStack(LinkStack* stack) {
        LinkNode* delNode = stack->head->next;
        stack->head->next = delNode->next;
        stack->size--;
    
        return delNode->data;
    }
    //4,返回栈顶元素的值
    char Top_LinkStack(LinkStack* stack) {
        return stack->head->next->data;
    }
    //5,返回栈元素的个数
    int Size_LinkStack(LinkStack* stack) {
        return stack->size;
    }
    
    int isValid(char * s){
        //获得一个栈
        LinkStack* stack = Init_LinkStack();
        //遍历字符串
        for(int i = 0;s[i] != '';i++) {
            if(s[i] == '(' || s[i] == '[' || s[i] == '{') {
                Push_LinkStack(stack,s[i]);
                continue;
            }
    
            if(Size_LinkStack(stack) != 0) {
                if((s[i] == ')' && Top_LinkStack(stack) == '(') ||
                   (s[i] == ']' && Top_LinkStack(stack) == '[') ||
                   (s[i] == '}' && Top_LinkStack(stack) == '{')
                        ) {
                    Pop_LinkStack(stack);
                }else {
                    return 0;
                }
            }else {
                return 0;
            }
        }
    
        if(Size_LinkStack(stack) == 0){
            return 1;
        }else {
            return 0;
        }
    }
    

    算法效果:

  • 相关阅读:
    linux部署zookeeper
    docker+fastdfs+springboot一键式搭建分布式文件服务器
    IDEA 设置springboot项目热部署
    定时备份docker部署的mysql数据
    离线安装docker
    PLSQL安装、PLSQL汉化、激活
    Mysql添加用户与授权
    MySql定时备份脚本
    mysql数据库定时备份
    实战申请Let's Encrypt永久免费SSL证书过程教程及常见问题
  • 原文地址:https://www.cnblogs.com/xgp123/p/12462686.html
Copyright © 2011-2022 走看看