zoukankan      html  css  js  c++  java
  • Leecode刷题之旅-C语言/python-20.有效的括号

    /*
     * @lc app=leetcode.cn id=20 lang=c
     *
     * [20] 有效的括号
     *
     * https://leetcode-cn.com/problems/valid-parentheses/description/
     *
     * algorithms
     * Easy (36.53%)
     * Total Accepted:    49.8K
     * Total Submissions: 136K
     * Testcase Example:  '"()"'
     *
     * 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
     * 
     * 有效字符串需满足:
     * 
     * 
     * 左括号必须用相同类型的右括号闭合。
     * 左括号必须以正确的顺序闭合。
     * 
     * 
     * 注意空字符串可被认为是有效字符串。
     * 
     * 示例 1:
     * 
     * 输入: "()"
     * 输出: true
     * 
     * 
     * 示例 2:
     * 
     * 输入: "()[]{}"
     * 输出: true
     * 
     * 
     * 示例 3:
     * 
     * 输入: "(]"
     * 输出: false
     * 
     * 
     * 示例 4:
     * 
     * 输入: "([)]"
     * 输出: false
     * 
     * 
     * 示例 5:
     * 
     * 输入: "{[]}"
     * 输出: true
     * 
     */
    bool isValid(char* s) {
        if(*s==NULL){
            return true;
        }
        int flag = 0;
        char a[10000];
        int top,i;
        char temp;
        // 初始化一个栈
        top = 0;
        for(i=0;i<strlen(s);i++){
            if(s[i]=='['){ // 如果是左括号直接入栈
                a[++top]=s[i];
                continue;
            }
            if(s[i]==']'){ // 如果是右括号,则尝试匹配
                temp = a[top];
                if(temp=='['){
                    flag = 1;
                    top--;
                    continue;
                }else{
                    flag = 0;
                    break;
                }
            }
    
            if(s[i]=='('){ // 如果是左括号直接入栈
                a[++top]=s[i];
                continue;
            }
            if(s[i]==')'){ // 如果是右括号,则尝试匹配
                temp = a[top];
                if(temp=='('){
                    flag = 1;
                    top--;
                    continue;
                }else{
                    flag = 0;
                    break;
                }
            }
            if(s[i]=='{'){ // 如果是左括号直接入栈
                a[++top]=s[i];
                continue;
            }
            if(s[i]=='}'){ // 如果是右括号,则尝试匹配
                temp = a[top];
                if(temp=='{'){
                    flag = 1;
                    top--;
                    continue;
                }else{
                    flag = 0;
                    break;
                }
            }
    
        }
        if(flag&&(top==0)){
            return true;
        }else{
            return false;
        }
    }

    如果是空的话,返回true。创建一个栈,top为栈内移动指针,如果是左括号,则存入栈中,top加一,如果是右括号,则和当前的栈顶元素进行匹配。匹配若成功,则top减一。匹配若不成功,则flag=0,直接跳出循环。

    最后判断flag是否等于一,并且栈顶指针top是否为0(证明所有左括号都被匹配过)

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    python:

    #
    # @lc app=leetcode.cn id=20 lang=python3
    #
    # [20] 有效的括号
    #
    # https://leetcode-cn.com/problems/valid-parentheses/description/
    #
    # algorithms
    # Easy (36.53%)
    # Total Accepted:    49.8K
    # Total Submissions: 136K
    # Testcase Example:  '"()"'
    #
    # 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
    # 
    # 有效字符串需满足:
    # 
    # 
    # 左括号必须用相同类型的右括号闭合。
    # 左括号必须以正确的顺序闭合。
    # 
    # 
    # 注意空字符串可被认为是有效字符串。
    # 
    # 示例 1:
    # 
    # 输入: "()"
    # 输出: true
    # 
    # 
    # 示例 2:
    # 
    # 输入: "()[]{}"
    # 输出: true
    # 
    # 
    # 示例 3:
    # 
    # 输入: "(]"
    # 输出: false
    # 
    # 
    # 示例 4:
    # 
    # 输入: "([)]"
    # 输出: false
    # 
    # 
    # 示例 5:
    # 
    # 输入: "{[]}"
    # 输出: true
    # 
    #
    class Solution:
        def isValid(self, s: str) -> bool:
            
            stack=[]                            #设置一个列表,把该列表当做栈来使用即可。
            dic={')':'(','}':'{',']':'['}       #使用字典存储括号,并且右括号为key,左括号为value
            for char in s:
                if char in dic.values():        #左括号就入栈
                    stack.append(char)
                elif char in dic.keys():        #有右括号的话就进行比较,
                    if stack==[] or dic[char] != stack.pop():
                        return False
                else:
                    return False                #不再字典中的输入直接输出错误
    
            return stack==[]                    #如果栈最后是空的,那么则符合要求,输出true,如果不是,则输出false,使用一个条件表达式
  • 相关阅读:
    MVC中的SelectList函数使用笔记
    如何用JQuery将View中的值Post到Controller
    几种主流网页开发语言的思考(上)
    郁闷的OpenPOP的MIME Parser
    关于OpenPOP/OpenSMTP/Mail.Net的一些东西……
    一个不知道是不是很笨的MS SQL数据库连接类
    Ruby on Rails 细节中的精彩
    关于FreeTextBox 1.63/2.0.7/3.0RC/3.0的一些东西
    翻译:微软是如何输掉API之战(上)
    MSN Messenger的用户管理
  • 原文地址:https://www.cnblogs.com/lixiaoyao123/p/10491998.html
Copyright © 2011-2022 走看看