标签:分代 题目 system content button 现在 else enum push
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),
测试数据组数少于5组。数据保证S中只含有"[", "]", "(", ")" 四种字符
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
3 [(]) (]) ([[]()])
No No Yes
解题思想:就是用一个stack,称为栈类。遇到左括号就压栈,否则,将这个元素与栈顶元素比较,如果相等,则消去栈顶元素。否则,不匹配。
我写完就提交了,没想到超时,需要做些判断条件。
代码实现如下:
package Combat.com; import java.util.Enumeration; import java.util.Scanner; import java.util.Stack; public class Main { public static void main(String []args) { Scanner cin = new Scanner(System.in); int N = cin.nextInt(); for(int i = 0; i < N; i++) { String str = cin.next(); AchieceStack(str); } } static void AchieceStack(String str) { if(str.charAt(0) == ‘]‘ || str.charAt(0) == ‘)‘)//第一个就出现不匹配 { System.out.println("No"); return; } Stack stack = new Stack(); int len = str.length(); stack.push(str.charAt(0)); for(int i = 1; i < len; i++) { if(str.charAt(i) == ‘[‘ || str.charAt(i) == ‘(‘)//左括号压栈 { stack.push(str.charAt(i)); } else//右括号判断 { if(stack.empty() || stack.size() > len-i)//特殊判断条件。 { System.out.println("No"); return; } char c = (char) stack.peek(); if(c == ‘[‘ && str.charAt(i) == ‘]‘) { stack.pop(); } else if(str.charAt(i) == ‘)‘ && c == ‘(‘) { stack.pop(); } else { System.out.println("No"); return; } } /*Enumeration items=stack.elements();//这部分代码用来检验的,很重要 //显示枚举(stack)中的所有元素 while(items.hasMoreElements()) { System.out.print(items.nextElement()+""); } System.out.println();*/ } if(!stack.empty()) { System.out.println("No"); } else { System.out.println("Yes"); } } }
标签:分代 题目 system content button 现在 else enum push
原文地址:https://www.cnblogs.com/674001396long/p/10771523.html