开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情
刷题的日常-2022年11月22号
一天一题,保持脑子清爽
设计 Goal 解析器
来自leetcode的 1678 题,题意如下:
请你设计一个可以解释字符串 command 的 Goal 解析器 。command 由 "G"、"()" 和/或 "(al)" 按某种顺序组成。Goal 解析器会将 "G" 解释为字符串 "G"、"()" 解释为字符串 "o" ,"(al)" 解释为字符串 "al" 。然后,按原顺序将经解释得到的字符串连接成一个字符串。
给你字符串 command ,返回 Goal 解析器 对 command 的解释结果。
理解题意
通过题意,我们可以将信息整理如下:
- 题目给出一个字符串,字符串是由"G"、"()" 和/或 "(al)" 组成的
- 给出一系列的规则
- "G" 变为 "G"
- "()" 变为 "o"
- "(al)" 变为 "al"
- 要求我们对原字符串按照规则替换之后 形成的 新字符串
做题思路
简单题,直接暴力模拟就可以得出答案,我们每次对读取的字符进行判断,如果有符合替换条件的字样出现,就用题意给出的条件进行替换,然后将其放回字符串中,步骤如下:
- 开辟一个缓存区保存字符串信息
- 循环读取字符,每次对字符的处理步骤如下
- 如果当前字符为 'G',则直接将当前字符加进缓冲区即可
- 如果当前字符不是'G',并且下一个字符是')',则将 'o' 放进缓冲区
- 否则将 "al" 放进缓冲区
- 在循环处理的过程当中要注意所以的变更,由于题目保证了给定的字符串是可以满足替换规则的,所以不需要进行校验。
代码实现
代码实现如下:
public class Solution {
public String interpret(String command) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < command.length(); i++) {
char c = command.charAt(i);
if (c == 'G') {
sb.append(c);
continue;
}
c = command.charAt(++i);
if (c == ')') {
sb.append('o');
continue;
}
i += 2;
sb.append("al");
}
return sb.toString();
}
}