using real Iterator<Integer> instead of fake CharacterIterator
parent
16ee5b632a
commit
cd9a9e3936
@ -1,20 +1,35 @@
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
import java.math.*;
|
||||
import java.util.function.BiPredicate;
|
||||
|
||||
/**
|
||||
* Template code to help you parse the standard input
|
||||
* according to the problem statement.
|
||||
**/
|
||||
class Solution {
|
||||
|
||||
public static void main( String[] args ) {
|
||||
Scanner in = new Scanner( System.in );
|
||||
// read values with in.next...() methods
|
||||
// best readable version, also without dark ASCII code tricks
|
||||
private static final BiPredicate<Integer, Integer> BRACKETS_MATCH = ( c1, c2 ) -> ( c1 != null && c2 != null )
|
||||
&& (( c1 == '(' && c2 == ')' ) || ( c1 == '[' && c2 == ']' ) || ( c1 == '{' && c2 == '}' ));
|
||||
|
||||
// code your solution here
|
||||
private static boolean checkNextChar( Deque<Integer> stack, Iterator<Integer> iter ) {
|
||||
if ( ! iter.hasNext() ) return stack.isEmpty();
|
||||
|
||||
int c = iter.next();
|
||||
if ( BRACKETS_MATCH.test( stack.peek(), c )) {
|
||||
stack.pop();
|
||||
}
|
||||
else {
|
||||
stack.push( c );
|
||||
}
|
||||
|
||||
return checkNextChar( stack, iter );
|
||||
}
|
||||
|
||||
public static void main( String[] args ) {
|
||||
// hint: read values via Scanner methods
|
||||
var inputLine = new Scanner( System.in ).nextLine();
|
||||
|
||||
var stack = new ArrayDeque<Integer>( inputLine.length() );
|
||||
var iter = inputLine.chars().iterator();
|
||||
|
||||
// Write result with System.out.println()
|
||||
System.out.println( "value" );
|
||||
System.out.println( checkNextChar( stack, iter ) );
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue