int main() { string str; cin >> str; int size = str.size(), count = 0; if (size == 4) { cout << 1; return 0; } vector<int> arr(size); int index = 0; for (string::iterator it = str.begin(); it != str.end(); it++) { if (*it == '(') arr[index] = 1; else if (*it == ')') arr[index] = -1; index++; } int last = -1, cursum = 0, cursum_cpy = 0;//last判断连续区域,cursum判断当前字符串合法性 for (int i = 0; i<size; i++) { if (arr[i] == last) continue; last = arr[i]; for (int j = 0; j<i; j++) cursum += arr[j]; //往后 cursum_cpy = cursum; for (int j = i + 1; j<size; j++) { cursum += arr[j]; if (cursum >= 0) { if (arr[i] != arr[j]) count++; } else break; } //往前 cursum = cursum_cpy; if (i>0) cursum -= arr[i - 1]; else continue; for (int j = i - 2; j >= 0; j--) { if (cursum + arr[i] < 0) break; cursum -= arr[j]; if (cursum + arr[i] >= 0) { if (arr[i] != arr[j]) count++; } else break; } } cout << count << endl; return 0; }