class Solution {
public static String removeKdigits ( String num, int k) {
char [ ] chars = num. toCharArray ( ) ;
List< Character> list = new ArrayList < > ( ) ;
for ( int i = 0 ; i < chars. length; i++ ) {
list. add ( chars[ i] ) ;
}
for ( int i = 0 ; i < k; i++ ) {
int index = list. size ( ) - 1 ;
for ( int j = 0 ; j < list. size ( ) - 1 ; j++ ) {
if ( list. get ( j+ 1 ) < list. get ( j) ) {
index = j;
break ;
}
}
list. remove ( index) ;
for ( int j = 0 ; j < list. size ( ) ; j++ ) {
if ( list. get ( j) == '0' ) {
list. remove ( j) ;
j = - 1 ;
} else {
break ;
}
}
if ( list. size ( ) == 0 ) {
return "0" ;
}
}
String result = "" ;
for ( int i = 0 ; i < list. size ( ) ; i++ ) {
result = result + list. get ( i) ;
}
return result;
}
}
public static String removeKdigits ( String num, int k) {
Deque< Character> deque = new ArrayDeque < > ( ) ;
char [ ] chars = num. toCharArray ( ) ;
for ( int i = 0 ; i < chars. length; i++ ) {
while ( k != 0 && ! deque. isEmpty ( ) && chars[ i] < deque. peekLast ( ) ) {
deque. pollLast ( ) ;
k-- ;
}
deque. offerLast ( chars[ i] ) ;
}
for ( int i = 0 ; i < k; i++ ) {
deque. pollLast ( ) ;
}
StringBuilder result = new StringBuilder ( ) ;
boolean flag = false ;
while ( ! deque. isEmpty ( ) ) {
char temp = deque. pollFirst ( ) ;
if ( ! flag && temp != '0' ) {
flag = true ;
}
if ( flag) {
result. append ( temp) ;
}
}
return result. length ( ) > 0 ? result. toString ( ) : "0" ;
}