-
Notifications
You must be signed in to change notification settings - Fork 0
/
valid_parentheses.rs
31 lines (27 loc) · 1.15 KB
/
valid_parentheses.rs
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
// 有效的括号
// https://leetcode.cn/problems/valid-parentheses/
// INLINE ../../images/heap/valid_parentheses.jpeg
// 解题思路:利用“栈”这个数据结构。
pub struct Solution;
impl Solution {
pub fn is_valid(s: String) -> bool {
let chars: Vec<char> = s.chars().collect(); // 将字符串转换为字符数组
if chars.len() == 0 {
return true; // 空字符串是有效的
}
let mut stack: Vec<char> = Vec::new(); // 定义一个空栈
for i in 0..chars.len() {
if chars[i] == '(' {
stack.push(')'); // 左括号入栈对应的右括号
} else if chars[i] == '[' {
stack.push(']'); // 左括号入栈对应的右括号
} else if chars[i] == '{' {
stack.push('}'); // 左括号入栈对应的右括号
} else if stack.is_empty() || chars[i] != stack.pop().unwrap() {
// 栈为空 或 不同于栈顶元素
return false; // 非法情况,直接返回 false
}
}
return stack.is_empty(); // 最后栈为空则合法,否则不合法
}
}