有一行括号序列,编写程序来检查括号是否匹配。
输入:
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符。
输出:
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No。
接到这个题的第一印象就是用栈来实现。读到左括号压栈,读到右括号出栈,并检查该出栈符号是否与刚刚读到的括号匹配。详细代码如下:
import java.util.*;
/**
* 括号匹配
* @author sdu20
*
*/
public class Brackets {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String nums = in.nextLine();
try{
int num = Integer.valueOf(nums).intValue();//为了防止第一行末尾的回车的影响
if(num>0){
String[] strs = new String[num];
for(int i = 0;i<num;i++){
strs[i] = in.nextLine();
}
for(int i = 0;i<num;i++){
if(right(strs[i]))
System.out.println("Yes");
else
System.out.println("No");
}
}
}catch(Exception e){
e.printStackTrace();
}
}
public static boolean right(String str){
int length = str.length();
if(length==0)
return false;
Stack<String> st = new Stack<>();
for(int i=0;i<length;i++){
char c = str.charAt(i);
if(c=='[')
st.push(""+c);
else if(c=='(')
st.push(""+c);
else if(c==']'){
if(st.isEmpty())
return false;
String s = st.pop();
if(s.equals("("))
return false;
}else if(c==')'){
if(st.isEmpty())
return false;
String s = st.pop();
if(s.equals("["))
return false;
}
}
if(st.isEmpty())
return true;
else
return false;
}
}
运行截图如下
1175

被折叠的 条评论
为什么被折叠?



