?
str = "()()".
.
isBalanced(l, r) str[l] + str[l+1] + ... + str[r-1] , (++) isBalanced(0, str.Length).
bool isBalanced(int l, int r) {
if(l == r) return true;
int depth = 0, prevptr = l;
for(int i = l; i < r; i++) {
if(str[i] == '(' || str[i] == '{' || str[i] == '[') depth++;
else depth--;
if(i != r - 1 && depth == 0) {
if(!isBalanced(prevptr, i + 1)) return false;
prevptr = i + 1;
}
}
if(depth != 0) return false;
if(prevptr != l) {
if(!isBalanced(prevptr, r)) return false;
return true;
}
bool ok = false;
if(str[l] == '(' && str[r - 1] == ')') ok = true;
if(str[l] == '{' && str[r - 1] == '}') ok = true;
if(str[l] == '[' && str[r - 1] == ']') ok = true;
if(!ok || !isBalanced(l + 1, r - 1)) return false;
return true;
}
, # -, # - ++-, ++ ( ++-)