测试代码
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
#include <string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
//统计连续配对的左右括号
int GetLongestMatch(string inputStr) {
int maxLength = 0; //记录最长的括号匹配长度
int deep = 0;
int start = -1;
//适合处理右括号数大于左括号数
for (int i = 0; i < inputStr.length(); i++) {
char c = inputStr.at(i);
if (c == '(') {
deep++;
}
else {
deep--;
if (deep == 0) {
maxLength = maxLength < (i - start) ? i - start : maxLength;
}
//右括号数大于左括号数 不连续 重新计数
if(deep < 0){
start = i;
deep = 0;
}
}
}
deep = 0;
start = inputStr.length();
//适合处理左括号数大于右括号数
for (int i = inputStr.length() - 1; i >= 0; i--) {
char c = inputStr.at(i);
if (c == ')') {
deep++;
}
else {
deep--;
if (deep == 0) {
maxLength = maxLength < (start - i) ? start - i : maxLength;
}
else if (deep < 0) {
deep = 0;
start = i;
}
}
}
return maxLength;
}
int main()
{
string inputStr;
cout << "请输入括号对:";
cin >> inputStr;
cout << "最长匹配结果: " << GetLongestMatch(inputStr) << endl;
system("pause");
return 0;
}
测试结果