最长有效括号的暴力解法(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 };
四、结尾
各位有什么看法都可以发表在评论区。

浙公网安备 33010602011771号