• 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;
        }
    }
    

    算法效果:

  • 相关阅读:
    MySql入门知识(一)
    一起学Android之Handler
    一起学Android之Http访问
    一起学Android之Sqlite
    一起学Android之Storage
    iOS核心动画高级技巧-1
    iOS界面流畅技巧之微博 Demo 性能优化技巧
    IOS 企业版证书($299)In-House方式发布指南
    App Store生存指南
    企业证书发布APP
  • 原文地址:https://www.cnblogs.com/xgp123/p/12462686.html
Copyright © 2020-2023  润新知