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

测试代码

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

测试结果

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

    原文作者:括号匹配问题
    原文地址: https://blog.csdn.net/u010989191/article/details/53192550
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞