7-2 括号匹配检测 (10 分)
编写程序,对输入的含有大,中,小括号的字符串进行检测,看括号是否是匹配的。 说明:1)仅处理括号匹配性,应该忽略其它字符。 2)括号匹配指的是(与)相配,[与]相配,而{总是与}相配。 3)可假定字符串的长度不超过100。 4)括号匹配时,返回出现的总对数(共我多少对左右括号)的,否则输出0。
输入样例1:
{[(a+b)*(c-d)-e]}*[x+y]
输出样例1:
5
输入样例2:
[a+b)*(c-d];
输出样例2:
0
import java.util.Scanner;
import java.util.Stack;
class Main{
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
String s = sc.nextLine();
if (isValid(s)) {
System.out.println(count);
}else System.out.println(0);
}
static int count = 0;
public static boolean isValid(String s){
Stack<Character> stack = new Stack<>();
for (int i = 0 ; i < s.length() ; i++){
char c = s.charAt(i);
if (c=='('||c==')'||c=='['||c==']'||c=='{'||c=='}') {
if(stack.isEmpty()&&(c==')'||c==']'||c=='}')){
stack.push(c);
}
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
} else {
if (c == ')' && stack.peek() == '(') {
stack.pop();
count++;
} else if (c == ']' && stack.peek() == '[') {
stack.pop();
count++;
} else if (c == '}' && stack.peek() == '{') {
stack.pop();
count++;
} else stack.push(c);
}
}else continue;
}
if (stack.isEmpty()){
return true;
}else
return false;
}
}
中工青年