1678. 设计 Goal 解析器
题目描述
请你设计一个可以解释字符串 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 <= 100command由"G"、"()"和/或"(al)"按某种顺序组成
解法
方法一:字符串替换
根据题意,只需要将字符串 command 中的 "()" 替换为 'o',"(al)" 替换为 "al" 即可。
时间复杂度 \(O(n)\),空间复杂度 \(O(n)\)。其中 \(n\) 是字符串 \(command\) 的长度。
1 2 3  |  | 
1 2 3 4 5  |  | 
1 2 3 4 5 6 7 8  |  | 
1 2 3 4 5  |  | 
1 2 3  |  | 
1 2 3 4 5  |  | 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20  |  | 
方法二:字符串遍历
我们也可以遍历字符串 command,对于每个字符 \(c\):
- 如果是 
'G',直接将 \(c\) 添加到结果串中; - 如果是 
'(',判断下一个字符是否是')',若是,将'o'添加到结果串中,否则,将"al"添加到结果串中。 
遍历结束,返回结果串即可。
时间复杂度 \(O(n)\),其中 \(n\) 是字符串 \(command\) 的长度。空间复杂度 \(O(1)\)。
1 2 3 4 5 6 7 8 9  |  | 
1 2 3 4 5 6 7 8 9 10 11 12 13 14  |  | 
1 2 3 4 5 6 7 8 9 10 11 12 13 14  |  | 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  |  | 
1 2 3 4 5 6 7 8 9 10 11 12 13  |  | 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21  |  |