【2022-11-06每日一题】1678. 设计 Goal 解析器[Easy]
2022-11-06
2分钟阅读时长
2022-11-06每日一题:1678. 设计 Goal 解析器
难度:Easy
标签:字符串
请你设计一个可以解释字符串 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)"
按某种顺序组成
func interpret(command string) string {
return strings.ReplaceAll(strings.ReplaceAll(command, "()", "o"), "(al)", "al")
}
方法二:一次遍历
- “G” 转换为 “G”;
- “()” 转换为 “o”;
- “(al)” 转换为 “al”;
写法一
func interpret(command string) string {
ans := []byte{}
for i, c := range command {
if c == 'G' {
ans = append(ans, 'G')
} else if c == ')' && command[i-1] == 'l'{
ans = append(ans, 'a', 'l')
} else if c == ')' && command[i-1] == '(' {
ans = append(ans, 'o')
}
}
return string(ans)
}
写法二
func interpret(command string) string {
res := &strings.Builder{}
for i, c := range command {
if c == 'G' {
res.WriteByte('G')
} else if c == '(' {
if command[i+1] == ')' {
res.WriteByte('o')
} else {
res.WriteString("al")
}
}
}
return res.String()
}
复杂度分析
- 时间复杂度:O(n),其中 n 表示字符串的长度。我们只需遍历一遍字符串即可。
- 空间复杂度:O(1)。除返回值以外不需要额外的空间。