Re: [闲聊] 每日leetcode

楼主: yam276 ('_')   2024-07-11 16:22:07
※ 引述《oin1104 (是oin的说)》之铭言:
: 题目:
: 给你字串
: 里面有()跟其他字母
: 每次遇到()都要翻转中间所有的东西
: 然后()就消失
: 回传他给的字串翻转后的结果
思路:
用stack
但我没怎么遇过
害我我去查了
幸好Rust多半都有push pop可以用
步骤
1. 没遇到括号就放进str
2. 遇到左括号先把目前的str放进stack
3. 遇到右括号代表这一段结束,
把目前存str的反转,
把stack倒出来,把反转的放在stack的str后面,
然后因为不用再处理,所以全部放回str,重复到结束
Code:
impl Solution {
pub fn reverse_parentheses(s: String) -> String {
let mut stack = Vec::new();
let mut cur_str = String::new();
for ch in s.chars() {
if ch == '(' {
stack.push(cur_str);
cur_str = String::new();
} else if ch == ')' {
cur_str = cur_str.chars().rev().collect();
if let Some(mut top) = stack.pop() {
top.push_str(&cur_str);
cur_str = top;
}
} else {
cur_str.push(ch);
}
}
cur_str
}
}
作者: oin1104 (是oin的说)   2024-07-11 16:39:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com