目录
一、最长有效括号的原题
这道题目是本人在做力扣题做到的。第一次做力扣题目,而且是困难的。本人采用的是暴力解法。
二、解题思路
第一步:首先将有效的括号全部找出来,放到一个数组里面去。
第二步:从该数组里将组将最长的有效括号找出来。
第三步:输出结果。
三、代码
解题思路代码注释有,本人就不啰嗦了。
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;
}
};
四、结尾
各位有什么看法都可以发表在评论区。