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

一、最长有效括号的原题
这道题目是本人在做力扣题做到的。第一次做力扣题目,而且是困难的。本人采用的是暴力解法。

二、解题思路
第一步:首先将有效的括号全部找出来,放到一个数组里面去。
第二步:从该数组里将组将最长的有效括号找出来。
第三步:输出结果。

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

 1 class Solution {
 2 public:
 3     int longestValidParentheses(string s) {
 4     //代码从这里开始
 5     char st[30000];             //这里是使用char型数组st存储字符串s(其实c++不好才这样子做的)
 6     char st1[30000];            //这里是存放有效的括号数组
 7     strcpy(st, s.c_str());      //将s复制到st数组里面去,由于s不是char型数组得转化一下,使用c_str()函数
 8     //cout << st << endl;
 9     memset(st1, '0', sizeof(st1));//这里的目的是将st1数组清零,防止出现乱码
10  
11     /*
12      1、这里的for循环是将有效括号存放到st1数组里面去。
13         这里的思路是:
14             (1)遇到右括号')'就向前面找和它配对的左括号'('
15             (2)找到了就将它们这对括号放到st1数组里面去,并且下标位置相同
16     */
17     for (int i = 0; i < s.length(); i++) {
18         if (st[i] == ')') {
19             int j = i - 1;
20             while (j > -1) {
21                 //这要判断一下是否是右括号'(',并且判断该右括号的位置是否被使用
22                 //只有没有被使用才将括号对放入st1数组中去
23                 if (st[j] == '(' && st1[j] == '0') {
24                     st1[j] = '(';
25                     st1[i] = ')';
26                     break;
27                 }
28                 j--;
29             }
30         }
31     }
32     int sum1 = 0;   //存放当前查询的有效括号的长度
33     int sum = 0;    //存放当前查询最长的有效括号的长度
34     for (int i = 0; i < s.length(); i++) {
35         if (st1[i] != '0') {
36             //等于0的时候跳过
37             sum1++;
38         }
39         else {
40             //不等于0的时候就算完了一串连续的有效括号数量
41             //并且将最长的有效括号的数量存放到sum中
42             if (sum < sum1) {
43                 sum = sum1;
44                 
45             }
46             //给当前的有效括号长度清零,进行下一次计数
47             sum1=0;
48         }
49     }
50     //这个是为了预防,最后算出来的是最长的有效括号长度,必须再次进行比较
51     if (sum < sum1) {
52                 sum = sum1;
53                 sum1=0;
54                 }
55     
56     //最后返回结果
57     return sum;
58     }
59 };

 

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

posted @ 2023-04-01 20:24  琪亚娜真可爱  阅读(65)  评论(0)    收藏  举报