题目描述
思路
把括号换成0和1(没什么实际意义,自己看着舒服)转化0后面必须接11 写一下代码 O(n^2)的总是通不过时间限制…估计要O(n)才行 懒得写了
代码
public static int minInsertions ( String s) {
int ans= 0 ;
int [ ] nums = new int [ s. length ( ) ] ;
for ( int i= 0 ; i< s. length ( ) ; i++ ) {
if ( s. charAt ( i) == '(' ) nums[ i] = 0 ;
else nums[ i] = 1 ;
}
for ( int i= 0 ; i< nums. length; i++ ) {
if ( nums[ i] == 1 ) {
boolean flag= false ;
for ( int j= i- 1 ; j>= 0 ; j-- ) {
if ( nums[ j] == 0 ) {
nums[ j] = - 1 ;
flag= true ;
break ;
}
}
if ( ! flag) ans+= 1 ;
if ( i== nums. length- 1 || nums[ i+ 1 ] != 1 ) ans+= 1 ;
else nums[ i+ 1 ] = - 1 ;
nums[ i] = - 1 ;
}
}
for ( int i= 0 ; i< nums. length; i++ ) {
if ( nums[ i] == 0 ) {
boolean flag= false ;
boolean flag1= false ;
int local= - 1 ;
int j= i+ 1 ;
for ( ; j< nums. length; j++ ) {
if ( j!= nums. length- 1 && nums[ j] == 1 && nums[ j+ 1 ] == 1 ) {
flag= true ;
break ;
}
if ( ! flag1 && nums[ j] == 1 ) {
flag1= true ;
local= j;
}
}
if ( flag) {
nums[ i] = - 1 ;
nums[ j] = - 1 ;
nums[ j+ 1 ] = - 1 ;
continue ;
}
if ( flag1) {
nums[ i] = - 1 ;
nums[ local] = - 1 ;
ans+= 1 ;
continue ;
}
ans+= 2 ;
nums[ i] = - 1 ;
}
}
return ans;
}