最长有效括号的暴力解法(C++解题)

目录

 

一、最长有效括号的原题

二、解题思路

三、代码

四、结尾


 

一、最长有效括号的原题

        这道题目是本人在做力扣题做到的。第一次做力扣题目,而且是困难的。本人采用的是暴力解法。

5aedf12fec0e4616ad2580c10f97fffc.png

 

1641590e02024ae7a6325512daab9e07.png

 

二、解题思路

        第一步:首先将有效的括号全部找出来,放到一个数组里面去。

        第二步:从该数组里将组将最长的有效括号找出来。

        第三步:输出结果。

 

三、代码

        解题思路代码注释有,本人就不啰嗦了。

class Solution {
public:
    int longestValidParentheses(string s) {
    //代码从这里开始
	char st[30000];             //这里是使用char型数组st存储字符串s(其实c++不好才这样子做的)
	char st1[30000];            //这里是存放有效的括号数组
	strcpy(st, s.c_str());      //将s复制到st数组里面去,由于s不是char型数组得转化一下,使用c_str()函数
	//cout << st << endl;
	memset(st1, '0', sizeof(st1));//这里的目的是将st1数组清零,防止出现乱码

    /*
     1、这里的for循环是将有效括号存放到st1数组里面去。
        这里的思路是:
            (1)遇到右括号')'就向前面找和它配对的左括号'('
            (2)找到了就将它们这对括号放到st1数组里面去,并且下标位置相同
    */
	for (int i = 0; i < s.length(); i++) {
		if (st[i] == ')') {
			int j = i - 1;
			while (j > -1) {
                //这要判断一下是否是右括号'(',并且判断该右括号的位置是否被使用
                //只有没有被使用才将括号对放入st1数组中去
				if (st[j] == '(' && st1[j] == '0') {
					st1[j] = '(';
					st1[i] = ')';
					break;
				}
				j--;
			}
		}
	}
	int sum1 = 0;   //存放当前查询的有效括号的长度
	int sum = 0;	//存放当前查询最长的有效括号的长度
	for (int i = 0; i < s.length(); i++) {
		if (st1[i] != '0') {
            //等于0的时候跳过
			sum1++;
		}
		else {
            //不等于0的时候就算完了一串连续的有效括号数量
            //并且将最长的有效括号的数量存放到sum中
			if (sum < sum1) {
				sum = sum1;
				
			}
            //给当前的有效括号长度清零,进行下一次计数
			sum1=0;
		}
	}
    //这个是为了预防,最后算出来的是最长的有效括号长度,必须再次进行比较
	if (sum < sum1) {
				sum = sum1;
				sum1=0;
				}
    
    //最后返回结果
	return sum;
    }
};

 

四、结尾

        各位有什么看法都可以发表在评论区。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值