leetcode第20题

简介: 括号匹配问题。如果只有一种括号,我们完全可以用一个计数器 count ,遍历整个字符串,遇到左括号加 1 ,遇到右括号减 1,遍历结束后,如果 count 等于 0 ,则表示全部匹配。但如果有多种括号,像 ( [ ) ] 这种情况它依旧会得到 0,所以我们需要用其他的方法。栈!遍历整个字符串,遇到左括号就入栈,然后遇到和栈顶对应的右括号就出栈,遍历结束后,如果栈为空,就表示全部匹配。

image.png

top20

括号匹配问题。

如果只有一种括号,我们完全可以用一个计数器 count ,遍历整个字符串,遇到左括号加 1 ,遇到右括号减 1,遍历结束后,如果 count 等于 0 ,则表示全部匹配。但如果有多种括号,像 ( [ ) ] 这种情况它依旧会得到 0,所以我们需要用其他的方法。

栈!

遍历整个字符串,遇到左括号就入栈,然后遇到和栈顶对应的右括号就出栈,遍历结束后,如果栈为空,就表示全部匹配。

publicbooleanisValid(Strings) {
Stack<Character>brackets=newStack<Character>(); 
for(inti=0;i<s.length();i++){
charc=s.charAt(i);
switch(c){
case'(':
case'[':
case'{':
brackets.push(c); 
break;
case')':
if(!brackets.empty()){
if(brackets.peek()=='('){
brackets.pop();
                    }else{
returnfalse;
                    }
                }else{
returnfalse;
                }
break;
case']':
if(!brackets.empty()){
if(brackets.peek()=='['){
brackets.pop();
                    }else{
returnfalse;
                    }
                }else{
returnfalse;
                }
break;
case'}':
if(!brackets.empty()){
if(brackets.peek()=='{'){
brackets.pop();
                    }else{
returnfalse;
                    }
                }else{
returnfalse;
                }
        }
    }
returnbrackets.empty();
}

时间复杂度:O(n)。

空间复杂度:O(n)。

如果学过数据结构,一定写过计算器,括号匹配问题一定遇到过的。

相关文章
|
8月前
LeetCode
LeetCode
46 0
|
8月前
leetcode-827:最大人工岛
leetcode-827:最大人工岛
73 0
|
8月前
leetcode-475:供暖器
leetcode-475:供暖器
57 0
|
8月前
|
消息中间件 Kubernetes NoSQL
LeetCode 1359、1360
LeetCode 1359、1360
|
存储
leetcode:53.最大字序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
60 0
LeetCode 389. 找不同
给定两个字符串 s 和 t,它们只包含小写字母。
86 0
|
索引
|
存储 Python
LeetCode 66. Plus One
给定表示非负整数的非空数字数组,加上整数的1。 存储数字使得最高有效数字位于列表的开头,并且数组中的每个元素包含单个数字。 您可以假设整数不包含任何前导零,除了数字0本身。
99 0
LeetCode 66. Plus One
|
算法
LeetCode——944. 删列造序
LeetCode——944. 删列造序
115 0