著作権:著者:xp_9512出典:CSDN著作権:この記事はブロガーオリジナル記事です、ボーエンのリンクを添付してください再現!オリジナル:https://blog.csdn.net/qq_40981804/article/details/91360281
効果的なブラケット
- タイトル
のみ与えられた '('、 ')' の文字列を含む、 '{'、 '}'、 '['、 ']'、文字列が有効であるかどうかを決定します。
有効な文字列を満たしている必要があります。
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
空の文字列が有効な文字列と考えることができます。
- 例
例1:
入力: "()" 出力:真
例2:
入力: "()[] {}" 出力:真
例3:
入力: "(]" 出力:偽
例4:
入力: "([)]" 出力:偽
例5:
入力: "{[]}" 出力:真
- アイデア
スタックのプロパティを使用しては、ブラケットを左出会い後に進んで、スタックにプッシュされる右括弧は、最上位の要素との一致が発生している、マッチが成功した場合には、最上位の要素をポップアップ表示されます、それ以外の場合は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);
}
}