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,使用一个条件表达式
  • 相关阅读:
    UVA 254 Towers of Hanoi
    UVA 701 The Archeologists' Dilemma
    UVA 185 Roman Numerals
    UVA 10994 Simple Addition
    UVA 10570 Meeting with Aliens
    UVA 306 Cipher
    UVA 10160 Servicing Stations
    UVA 317 Hexagon
    UVA 10123 No Tipping
    UVA 696 How Many Knights
  • 原文地址:https://www.cnblogs.com/lixiaoyao123/p/10491998.html
Copyright © 2011-2022 走看看