您的位置:首页 > 编程语言 > C语言/C++

[C++]连续最长括号匹配问题解决策略二(学习)

2017-10-06 00:00 726 查看

测试代码

#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;
}

测试结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: