/* * @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,使用一个条件表达式