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()
    }
}

}