Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CSDN 技术社区
skill_tree_algorithm
提交
8b6d46b8
S
skill_tree_algorithm
项目概览
CSDN 技术社区
/
skill_tree_algorithm
通知
9
Star
8
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
skill_tree_algorithm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
8b6d46b8
编写于
11月 02, 2021
作者:
每日一练社区
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update code
上级
c4582537
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
177 addition
and
0 deletion
+177
-0
data/3.算法高阶/1.leetcode/31_最长有效括号/solution.md
data/3.算法高阶/1.leetcode/31_最长有效括号/solution.md
+177
-0
未找到文件。
data/3.算法高阶/1.leetcode/31_最长有效括号/solution.md
0 → 100644
浏览文件 @
8b6d46b8
# 最长有效括号
以下错误的选项是?
## aop
### before
```
cpp
```
### after
```
cpp
```
## 答案
```
cpp
class
Solution
{
public:
int
longestValidParentheses
(
string
s
)
{
int
n
=
s
.
size
();
if
(
n
==
1
)
return
0
;
if
(
n
==
2
)
{
if
(
s
[
0
]
==
'('
&&
s
[
1
]
==
')'
)
return
2
;
else
return
0
;
}
vector
<
int
>
dp
(
n
,
0
);
int
max
=
0
;
for
(
int
i
=
1
;
i
<
n
;
i
++
)
{
if
(
s
[
i
]
==
')'
&&
s
[
i
-
1
]
==
'('
&&
i
>=
2
)
dp
[
i
]
=
dp
[
i
-
2
]
+
2
;
if
(
s
[
i
]
==
')'
&&
s
[
i
-
1
]
==
'('
&&
i
==
1
)
dp
[
i
]
=
2
;
if
(
s
[
i
]
==
')'
&&
s
[
i
-
1
]
==
')'
&&
s
[
i
-
dp
[
i
-
1
]
-
1
]
==
'('
)
dp
[
i
]
=
dp
[
i
-
1
]
+
2
+
dp
[
dp
[
i
-
1
]
-
2
];
if
(
dp
[
i
]
>
max
)
max
=
dp
[
i
];
}
return
max
;
}
};
```
## 选项
### A
```
cpp
class
Solution
{
public:
int
longestValidParentheses
(
string
s
)
{
stack
<
int
>
stk
;
int
invalid
=
-
1
;
int
len
=
0
,
max_len
=
0
;
for
(
int
i
=
0
;
i
<
s
.
length
();
i
++
)
{
if
(
s
[
i
]
==
'('
)
{
stk
.
push
(
i
);
}
else
{
if
(
stk
.
empty
())
{
invalid
=
i
;
}
else
{
stk
.
pop
();
if
(
stk
.
empty
())
{
max_len
=
max
(
i
-
invalid
,
max_len
);
}
else
{
max_len
=
max
(
i
-
stk
.
top
(),
max_len
);
}
}
}
}
return
max_len
;
}
};
```
### B
```
cpp
class
Solution
{
public:
int
longestValidParentheses
(
string
s
)
{
stack
<
int
>
left
;
left
.
push
(
-
1
);
int
size
=
0
,
maxSize
=
0
;
for
(
int
i
=
0
;
i
<
s
.
size
();
i
++
)
{
if
(
s
[
i
]
==
'('
)
left
.
push
(
i
);
else
{
if
(
left
.
size
()
!=
1
)
{
left
.
pop
();
size
=
i
-
left
.
top
();
maxSize
=
max
(
maxSize
,
size
);
}
else
{
left
.
pop
();
left
.
push
(
i
);
}
}
}
maxSize
=
max
(
maxSize
,
size
);
return
maxSize
;
}
};
```
### C
```
cpp
class
Solution
{
public:
int
longestValidParentheses
(
string
s
)
{
queue
<
pair
<
int
,
int
>>
q
;
bool
*
valid
=
new
bool
[
s
.
length
()
+
1
];
int
imax
=
-
1
;
memset
(
valid
,
0
,
sizeof
(
bool
)
*
(
s
.
length
()
+
1
));
for
(
int
i
=
0
;
i
<
int
(
s
.
length
())
-
1
;
i
++
)
{
if
(
s
[
i
]
==
'('
&&
s
[
i
+
1
]
==
')'
)
{
valid
[
i
]
=
true
;
valid
[
i
+
1
]
=
true
;
q
.
push
(
make_pair
(
i
,
i
+
1
));
}
}
while
(
!
q
.
empty
())
{
pair
<
int
,
int
>
parentheses
;
parentheses
=
q
.
front
();
q
.
pop
();
int
l
=
parentheses
.
first
,
r
=
parentheses
.
second
;
while
(
l
>=
0
&&
valid
[
l
])
l
--
;
while
(
r
<
s
.
length
()
&&
valid
[
r
])
r
++
;
if
(
!
valid
[
l
]
&&
!
valid
[
r
])
{
if
(
s
[
l
]
==
'('
&&
s
[
r
]
==
')'
)
{
valid
[
l
]
=
true
;
valid
[
r
]
=
true
;
q
.
push
(
make_pair
(
l
,
r
));
}
else
{
l
=
l
+
1
;
r
=
r
-
1
;
}
}
if
(
r
-
l
>
imax
)
imax
=
r
-
l
;
}
return
imax
+
1
;
}
};
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录