Java 这有什么区别?
这个问题与hackerRank的问题有关- 在while循环中放入堆栈有什么区别 若我将堆栈放入循环中,则模式“[]”返回true,但返回false 如果我真的在课堂上学习的话 正确答案应该是正确的Java 这有什么区别?,java,stack,Java,Stack,这个问题与hackerRank的问题有关- 在while循环中放入堆栈有什么区别 若我将堆栈放入循环中,则模式“[]”返回true,但返回false 如果我真的在课堂上学习的话 正确答案应该是正确的 import java.util.*; class Solution{ public static void main(String []argh) { Scanner sc = new Scanner(System.in); w
import java.util.*;
class Solution{
public static void main(String []argh)
{
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
String input=sc.nextLine();
Stack<Character> stack = new Stack<>();
for( char c : input.toCharArray() ){
if( c == '{' || c == '(' || c =='['){
stack.push(c);
continue;
}
if( c == '}' && !stack.isEmpty() && stack.peek() == '{' ){
stack.pop();
continue;
}
if( c == ')' && !stack.isEmpty() && stack.peek() == '(' ){
stack.pop();
continue;
}
if( c == ']' && !stack.isEmpty() && stack.peek() == '[' ){
stack.pop();
continue;
}
if( c == '}' || c == ')'|| c == '['){
stack.push(c);
break;
}
} //end for
System.out.println(stack.isEmpty());
} //end while
} //end main
} //end class
import java.util.*;
类解决方案{
公共静态void main(字符串[]argh)
{
扫描仪sc=新的扫描仪(System.in);
while(sc.hasNextLine()){
字符串输入=sc.nextLine();
堆栈=新堆栈();
for(char c:input.toCharArray()){
如果(c=='{'| | c=='('| | c=='[')){
堆栈推送(c);
继续;
}
如果(c=='}'&&!stack.isEmpty()&&stack.peek()=='{'){
stack.pop();
继续;
}
如果(c==')和&!stack.isEmpty()&&stack.peek()=='(')){
stack.pop();
继续;
}
如果(c==']'&&&!stack.isEmpty()&&stack.peek()=='['){
stack.pop();
继续;
}
如果(c='}'| | c=')'| | c=='['){
堆栈推送(c);
打破
}
}//结束
System.out.println(stack.isEmpty());
}//结束时
}//末端总管
}//结束类
在循环内部,while循环的每次迭代都会创建一个全新的堆栈。如果将其放在类级别,则在程序的生命周期内只会创建一个堆栈
只有当您有多行输入时,这才会有所不同
如果您只使用一个堆栈,那么该堆栈还将包括前一行输入中的括号,这使得:
{
false
}
true
首先,我输入了{
。这不平衡,因此为false
。在下一行中,我输入了}
。它不平衡,但输出为true
。这是因为上一行的{
仍在堆栈中!这就是为什么您应该为每一行创建一个新堆栈的原因(每隔一段循环迭代)
另一种方法是将堆栈置于类级别,但在每次迭代开始时调用clear
:
while (sc.hasNextLine()) {
stack.clear(); // <----
String input=sc.nextLine();
for( char c : input.toCharArray() ){
while(sc.hasNextLine()){
Stask.Car();//在while循环之外,堆栈将检查整个输入文本,而不是逐行扫描。哦,好的:谢谢。谢谢,感觉真棒。如果你认为我的答案能回答你的问题,请考虑点击这个复选标记来接受它。@ Akangsasigh