2019-05-08 | 技术 | UNLOCK

计算最长有效子串

问题

判断在一条字符串里,合法的括号表示式有多长
“(()” – 2
“)()())” – 4

解法

看了solution里的3种,这样的规律我感觉一般人是很难总结出来的。然后看了讨论区,发现有一种解法和自己一开始想的相近,这样的解法才比较符合一般人的思路。

那就是把有效的区域看做是被无效的切分开,我们要做的是找到被切开的各段的长度。

步骤:
用一个栈来记录无法合并的索引
然后根据索引来统计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class Solution {
public:
int longestValidParentheses(string s) {
stack<int> c_s;
for (int i = 0; i < s.size(); i++)
{
if (s[i] == '(')
{
c_s.push(i);
}
else
{
if (!c_s.empty())
{
if (s[c_s.top()] == '(')
{
c_s.pop();
}
else
{
c_s.push(i);
}
}
else
{
c_s.push(i);
}
}
}
if (c_s.empty())
{
return s.size();
}
int a = s.size(), b = 0;
int max_ = 0;
while (!c_s.empty())
{
b = c_s.top();
c_s.pop();
max_ = max(max_, a - b - 1);
a = b;
}
max_ = max(max_, a);
return max_;
}

};

评论加载中