20. 有效的括号
题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。
解题思路
#![allow(unused)] fn main() { struct Solution {} impl Solution { pub fn is_valid(s: String) -> bool { let mut v = vec![]; // only }]) for c in s.chars() { if c == '(' || c == '[' || c == '{' { v.push(Self::mutate(c)); } else { if let Some(&x) = v.last() { if x == c { v.pop(); } else { return false } } else { return false } } } v.is_empty() } fn mutate(x: char) -> char { if x == '(' { return ')' } else if x == '[' { return ']' } else {return '}'} } } }
学习感想
#![allow(unused)] fn main() { struct Solution {} impl Solution { pub fn is_valid(s: String) -> bool { let mut stack: Vec<char> = Vec::new(); for c in s.chars() { if ['{', '(', '['].contains(&c) { stack.push(c); } else { if let Some(x) = stack.pop() { if x == '{' && c != '}' { return false } else if x == '(' && c != ')' { return false } else if x == '[' && c != ']' { return false } } else { return false } } } stack.is_empty() } } }