20.有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
思路
- 建立一个栈
- 字符长度不能被二整除,则不匹配
- 首先左括号直接入栈
- 接着不是左括号且为空,则不匹配
- 右括号则出栈,判断是否匹配
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| package com.wereash.scut_hot100;
import java.util.ArrayDeque; import java.util.Deque; import java.util.Scanner;
public class Solution020 { public static void main(String[] args){ Scanner scanner=new Scanner(System.in); String str=scanner.nextLine(); Deque<Character> stack=new ArrayDeque<>(); for(int i=0;i<str.length();i++){ char a=str.charAt(i); if (a=='('||a=='['||a=='{'){ stack.push(a); }else { if(stack.isEmpty()){ System.out.println("括号不匹配!"); return; } char temp=stack.pop(); if(!isCompare(temp,str.charAt(i))){ System.out.println("括号不匹配"); return; } } } if (stack.isEmpty()) System.out.println("括号匹配"); else System.out.println("括号不匹配");
} private static boolean isCompare(Character a,Character b){ if(a=='('&&b==')'){ return true; }else if (a=='['&&b==']'){ return true; }else if (a=='{'&&b=='}'){ return true; }else return false; }
}
|