判断括号是否匹配
程序员文章站
2022-07-15 16:28:04
...
题目要求:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
解题思路:利用栈来实现判断括号是否匹配
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for(int i = 0; i<s.length(); i++){
Character c = s.charAt(i);//获取下标为i的字符
if(c == '(' || c == '[' || c == '{'){
stack.push(c);//满足要求就让该字符入栈
continue;
}
//判断字符是否有效,无效直接返回false
if(stack.empty()){
return false;
}
Character top = stack.pop();//取栈顶字符,看是否和下标为i的字符匹配
if(top == '(' && c == ')'){
continue;
}
if(top == '{' && c == '}'){
continue;
}
if(top == '[' && c == ']'){
continue;
}
return false;
}
//当且仅当栈中所有元素均出栈,才满足括号匹配
if(stack.empty()){
return true;
}
return false;
}
}
代码优化,用Map思路更为清楚!!!
class Solution {
public boolean isValid(String s) {
Map<Character,Character> map = new HashMap<>();
map.put('(',')');
map.put('{','}');
map.put('[',']');
Stack<Character> stack = new Stack<>();
for(int i = 0; i<s.length(); i++){
Character c = s.charAt(i);//获取下标为i的字符
if(c == '(' || c == '[' || c == '{'){
stack.push(c);//满足要求就让该字符入栈
continue;
}
//判断字符是否有效,无效直接返回false
if(stack.empty()){
return false;
}
Character top = stack.pop();//取栈顶字符,看是否和下标为i的字符匹配
if(map.get(top) == c){
continue;
}
return false;
}
//当且仅当栈中所有元素均出栈,才满足括号匹配
if(stack.empty()){
return true;
}
return false;
}
}
上一篇: 枚举.2.套路(自动计数)
下一篇: C语言习题3
推荐阅读
-
Oracle删除表前判断表名是否存在若存在则删除
-
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
-
Shell脚本判断IP地址是否合法的方法
-
js判断checkbox是否被选中(js获取复选框选中的值 )
-
js如何判断json对象是否为空(js回调函数详解)
-
C#判断一个类是否实现了某个接口3种实现方法
-
python判断设备是否联网的方法
-
Android 使用SharePerference判断是否为第一次登陆的实现代码
-
java判断远程服务器上的文件是否存在的方法
-
C#实现判断操作系统是否为Win8以上版本