版权声明:作者:xp_9512 来源:CSDN 版权声明:本文为博主原创文章,转载请附上博文链接! 原文: https://blog.csdn.net/qq_40981804/article/details/91360281
有效括号
- 题目
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
- 示例
示例 1:
输入: “()” 输出: true
示例 2:
输入: “()[]{}” 输出: true
示例 3:
输入: “(]” 输出: false
示例 4:
输入: “([)]” 输出: false
示例 5:
输入: “{[]}” 输出: true
- 思路
利用栈的性质,先进后出,遇到左括号则压入栈,遇到右括号则与栈顶元素匹配,若匹配成功则将栈顶元素弹出,反之返回false。 - 案例
class Solution {
//用于比较的函数
private HashMap<Character,Character> mapping;
public Solution(){
this.mapping = new HashMap<>();
this.mapping.put(')','(');
this.mapping.put(']','[');
this.mapping.put('}','{');
}
//比较函数
public boolean isValid(String s) {
//初始化一个栈 ,备用
Stack<Character> stack = new Stack<>();
for(int i = 0;i < s.length(); i++){
//获得字符串中的第一个字符
char c = s.charAt(i);
//如果当前字符是以括号结尾 则获取栈顶元素
if(this.mapping.containsKey(c)){
// 获取堆栈的顶部元素。如果堆栈为空,请设置虚拟值“#”
char topElement = stack.empty() ? '#' : stack.pop();
//如果此括号的映射与堆栈的top元素不匹配,则返回false。
if (topElement != this.mapping.get(c)) {
return false;
}
}else {
// 否则就入栈
stack.push(c);
}
}
return stack.isEmpty();
}
//测试函数
public static void main(String[] args){
String line = "[]{}(){{{()}}}";
boolean ret = new Solution().isValid(line);
String out = booleanToString(ret);
System.out.print(out);
}
}