一个算法题。求解
描述 现在,有一行括号序列,请你检查这行括号是否配对。输入第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
import java.util.*;
import java.io.*;
public class Test2 {
public static void main(String []args){
Scanner i = new Scanner(System.in);
int a=i.nextInt();
String c[] = new String[5];
Stack<Character> s =new Stack<Character>();
char st1;
boolean match[] =new boolean[5];
for(int k=0;k<a;k++){
Scanner sc = new Scanner(System.in);
String st=sc.nextLine();
c[k]=st;
}
for(int k=0;k<a;k++){
match[k]=true;
for(int j=0;j<c[k].length();j++){
st1=c[k].charAt(j);
if(st1=='('||st1=='['){
s.push(st1);
}
if(st1==')'||st1==']'){
if(s.empty()){
match[k]=false;
break;
}
else if((st1==')'&&s.peek()=='(')||(st1==']'&&s.peek()=='['))
s.pop();
else {match[k]=false; break;}
}
}
if(!s.empty()) match[k]=false;
//s=null;
}
for(int k =0;k<a;k++){
if(match[k])
System.out.println("Yes");
else
System.out.println("No");}
}
}
为什么调试的组数多了 就出现单组调试对 多组里一起调试就错 --------------------编程问答-------------------- 没仔细看你的代码, 再处理一下输入的地方应该就没事了
import java.util.*;--------------------编程问答--------------------
public class Test {
public static void main(String[] args) {
System.out.println(bracketsMatched("([])")); // matched
System.out.println(bracketsMatched("([(])")); // unmatched
System.out.println(bracketsMatched("((['']))")); // unmatched
}
public static boolean bracketsMatched(String str) {
Stack<String> stack = new Stack<String>();
for (int i = 0; i < str.length(); ++i) {
char ch = str.charAt(i);
switch(ch) {
case '(':
case '[':
stack.push(ch + "");
break;
case ')':
case ']':
stack.pop();
break;
default:
return false;
}
}
return stack.empty();
}
}
public static boolean bracketsMatched(String str) {--------------------编程问答--------------------
Stack<Character> stack = new Stack<Character>(); // [[1]] 这里可以改一下
for (int i = 0; i < str.length(); ++i) {
char ch = str.charAt(i);
switch(ch) {
case '(':
case '[':
stack.push(ch); // [[2]] 这里可以改一下
break;
case ')':
case ']':
stack.pop();
break;
default:
return false;
}
}
return stack.empty();
}
能帮我看看我的代码哪里错了么。
是不是因为栈没清空?
不想直接照着你的代码敲,想搞懂为什么会出现这种情况。谢谢。 --------------------编程问答-------------------- 【(】)这样的能解决么?你没有严格的验证闭合吧 --------------------编程问答--------------------
可以解决啊。 --------------------编程问答-------------------- 有点错误,忘了匹配
import java.util.*;--------------------编程问答-------------------- case ')':
public class Test {
public static void main(String[] args) {
System.out.println(bracketsMatched("([])")); // matched
System.out.println(bracketsMatched("([(])")); // unmatched
System.out.println(bracketsMatched("((['']))")); // unmatched
}
public static boolean bracketsMatched(String str) {
Stack<Character> stack = new Stack<Character>();
char temp;
for (int i = 0; i < str.length(); ++i) {
char ch = str.charAt(i);
switch(ch) {
case '(':
case '[':
stack.push(ch);
break;
case ')':
temp = stack.pop();
if (temp != '(') { return false; }
break;
case ']':
temp = stack.pop();
if (temp != '[') { return false; }
break;
default:
return false;
}
}
return stack.empty();
}
}
temp = stack.pop();
if (temp != '(') { return false; }
break;
这里不判断空栈么?
import java.util.Scanner;
import java.util.Stack;
public class test {
public static void main(String[] args) {
Scanner i = new Scanner(System.in);
int a=i.nextInt();
String c[] = new String[5];
Stack<Character> s =new Stack<Character>();
char st1;
boolean match[] =new boolean[5];
//输入的组数
for(int k=0;k<a;k++){
Scanner sc = new Scanner(System.in);
String st=sc.nextLine();
c[k]=st;
}
//判断每组结果
for(int k=0;k<a;k++){
match[k]=true;
int ip=0;
s:
for(int j=0;j<c[k].length();j++){
st1=c[k].charAt(j);
switch(st1) {
case '(':
case '[':
s.push(st1);ip++; break;
case ')':
if(s.empty()) break s;
else if(s.peek()=='('){ s.pop(); break;}
else break s;
case ']':
if(s.empty()) break s;
else if(s.peek()=='[') {s.pop(); break; }
else break s;
default:
}
}
//判断栈为空的两种情况
if(ip==0) match[k]=false;
else if(s.empty()) match[k]=true;
else match[k]=false;
}
//输出最后结果
for(int k =0;k<a;k++){
if(match[k])
System.out.println("Yes");
else
System.out.println("No");
}
}
}
还是有一个问题 当输入
3
)))
((
[]
输出结果是 NO NO NO 为什么啊?
补充:Java , Java相关