haar_lib/algo/
paren.rs

1//! 括弧列が対応が取れているかを調べる
2
3/// 括弧列が対応が取れているかを調べる
4///
5/// **Time Complexity O(N)**
6pub fn check_paren<T: Copy + Eq>(s: impl IntoIterator<Item = T>, open: T, close: T) -> bool {
7    let mut stack = vec![];
8
9    for c in s {
10        if stack.last().is_some() {
11            if c == close {
12                stack.pop();
13            } else if c == open {
14                stack.push(c);
15            } else {
16                return false;
17            }
18        } else if c == open {
19            stack.push(c);
20        } else {
21            return false;
22        }
23    }
24
25    stack.is_empty()
26}