carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode1678:设计 Goal 解析器(goal-parser-interpretation) #264

Open carloscn opened 1 year ago

carloscn commented 1 year ago

问题描述

请你设计一个可以解释字符串 command 的 Goal 解析器 。command 由 "G"、"()" 和/或 "(al)" 按某种顺序组成。Goal 解析器会将 "G" 解释为字符串 "G"、"()" 解释为字符串 "o" ,"(al)" 解释为字符串 "al" 。然后,按原顺序将经解释得到的字符串连接成一个字符串。

给你字符串 command ,返回 Goal 解析器 对 command 的解释结果。

 

示例 1:

输入:command = "G()(al)" 输出:"Goal" 解释:Goal 解析器解释命令的步骤如下所示: G -> G () -> o (al) -> al 最后连接得到的结果是 "Goal"

示例 2:

输入:command = "G()()()()(al)" 输出:"Gooooal"

示例 3:

输入:command = "(al)G(al)()()G" 输出:"alGalooG"  

提示:

1 <= command.length <= 100 command 由 "G"、"()" 和/或 "(al)" 按某种顺序组成

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/goal-parser-interpretation

carloscn commented 1 year ago

问题分析

pub fn interpret(command: &str) -> String
{
    if command.len() < 1 {
        return String::new();
    }

    let mut ret:Vec<char> = vec![];
    let cmd:Vec<char> = command.chars().collect();
    let mut i:usize = 0;

    while i < cmd.len() {
        if cmd[i] == 'G' {
            ret.push('G');
        } else if cmd[i] == '(' {
            if i + 1 < cmd.len() && cmd[i + 1] == ')' {
                ret.push('o');
                i += 2;
                continue;
            }
            while  i + 1 < cmd.len() && cmd[i + 1] != ')' {
                ret.push(cmd[i + 1]);
                i += 1;
            }
        }
        i += 1;
    }

    return ret.into_iter().collect();
}
carloscn commented 1 year ago

code

https://review.gerrithub.io/c/carloscn/structstudy/+/556326 https://github.com/carloscn/structstudy/commit/ce3f256b295fefbb2449a8f4603f2f278c292aad