题目

标题和出处

标题:设计 Goal 解析器

出处:1678. 设计 Goal 解析器

难度

2 级

题目描述

要求

请你设计一个可以解释字符串 字符串题目:设计 Goal 解析器 - 图1Goal 解析器字符串题目:设计 Goal 解析器 - 图2字符串题目:设计 Goal 解析器 - 图3字符串题目:设计 Goal 解析器 - 图4%22%7D#card=math&code=%5Ctexttt%7B%22%28%29%22%7D&id=BpeXS) 和/或 字符串题目:设计 Goal 解析器 - 图5%22%7D#card=math&code=%5Ctexttt%7B%22%28al%29%22%7D&id=dZ4qi) 按某种顺序组成。Goal 解析器会将 字符串题目:设计 Goal 解析器 - 图6 解释为字符串 字符串题目:设计 Goal 解析器 - 图7字符串题目:设计 Goal 解析器 - 图8%22%7D#card=math&code=%5Ctexttt%7B%22%28%29%22%7D&id=LbKGn) 解释为字符串 字符串题目:设计 Goal 解析器 - 图9字符串题目:设计 Goal 解析器 - 图10%22%7D#card=math&code=%5Ctexttt%7B%22%28al%29%22%7D&id=JehtZ) 解释为字符串 字符串题目:设计 Goal 解析器 - 图11。然后,按原顺序将经解释得到的字符串连接成一个字符串。

给你字符串 字符串题目:设计 Goal 解析器 - 图12,返回 Goal 解析器字符串题目:设计 Goal 解析器 - 图13 的解释结果。

示例

示例 1:

输入:字符串题目:设计 Goal 解析器 - 图14(al)%22%7D#card=math&code=%5Ctexttt%7Bcommand%20%3D%20%22G%28%29%28al%29%22%7D&id=NqahZ)
输出:字符串题目:设计 Goal 解析器 - 图15
解释:Goal 解析器解释命令的步骤如下所示:
字符串题目:设计 Goal 解析器 - 图16
字符串题目:设计 Goal 解析器 - 图17%20-%3E%20o%7D#card=math&code=%5Ctexttt%7B%28%29%20-%3E%20o%7D&id=uOgyV)
字符串题目:设计 Goal 解析器 - 图18%20-%3E%20al%7D#card=math&code=%5Ctexttt%7B%28al%29%20-%3E%20al%7D&id=XmG55)
最后连接得到的结果是 字符串题目:设计 Goal 解析器 - 图19

示例 2:

输入:字符串题目:设计 Goal 解析器 - 图20()()()(al)%22%7D#card=math&code=%5Ctexttt%7Bcommand%20%3D%20%22G%28%29%28%29%28%29%28%29%28al%29%22%7D&id=Op51k)
输出:字符串题目:设计 Goal 解析器 - 图21

示例 3:

输入:字符串题目:设计 Goal 解析器 - 图22G(al)()()G%22%7D#card=math&code=%5Ctexttt%7Bcommand%20%3D%20%22%28al%29G%28al%29%28%29%28%29G%22%7D&id=X65Ql)
输出:字符串题目:设计 Goal 解析器 - 图23

数据范围

  • 字符串题目:设计 Goal 解析器 - 图24
  • 字符串题目:设计 Goal 解析器 - 图25字符串题目:设计 Goal 解析器 - 图26字符串题目:设计 Goal 解析器 - 图27%22%7D#card=math&code=%5Ctexttt%7B%22%28%29%22%7D&id=vXPfV) 和/或 字符串题目:设计 Goal 解析器 - 图28%22%7D#card=math&code=%5Ctexttt%7B%22%28al%29%22%7D&id=oGNrP) 按某种顺序组成

解法

思路和算法

由于给定的字符串 字符串题目:设计 Goal 解析器 - 图29字符串题目:设计 Goal 解析器 - 图30字符串题目:设计 Goal 解析器 - 图31 和/或 字符串题目:设计 Goal 解析器 - 图32 按某种顺序组成,因此一定可以正确地解析字符串 字符串题目:设计 Goal 解析器 - 图33,不需要考虑不合法的情况。

从左到右遍历字符串 字符串题目:设计 Goal 解析器 - 图34,使用 字符串题目:设计 Goal 解析器 - 图35 类型的变量存储解析之后的结果。具体而言,根据当前字符和下一个字符决定当前需要解析的字符个数。

  • 如果当前字符是 字符串题目:设计 Goal 解析器 - 图36,则当前需要解析 字符串题目:设计 Goal 解析器 - 图37 个字符,解析结果是 字符串题目:设计 Goal 解析器 - 图38
  • 如果当前字符是 字符串题目:设计 Goal 解析器 - 图39,则根据下一个字符解析:
    • 如果下一个字符是 字符串题目:设计 Goal 解析器 - 图40,则当前需要解析 字符串题目:设计 Goal 解析器 - 图41 个字符,解析结果是 字符串题目:设计 Goal 解析器 - 图42
    • 如果下一个字符不是 字符串题目:设计 Goal 解析器 - 图43,则当前需要解析 字符串题目:设计 Goal 解析器 - 图44 个字符,解析结果是 字符串题目:设计 Goal 解析器 - 图45

遍历过程中维护下标值。每次将下标处的字符作为当前字符,解析之后,将下标值更新,继续对剩下部分解析。当下标值超出字符串的下标范围时,解析结束。

代码

  1. class Solution {
  2. public String interpret(String command) {
  3. int length = command.length();
  4. StringBuffer sb = new StringBuffer();
  5. int index = 0;
  6. while (index < length) {
  7. char c = command.charAt(index);
  8. if (c == 'G') {
  9. sb.append("G");
  10. index++;
  11. } else {
  12. if (command.charAt(index + 1) == ')') {
  13. sb.append("o");
  14. index += 2;
  15. } else {
  16. sb.append("al");
  17. index += 4;
  18. }
  19. }
  20. }
  21. return sb.toString();
  22. }
  23. }

复杂度分析

  • 时间复杂度:字符串题目:设计 Goal 解析器 - 图46#card=math&code=O%28n%29&id=RlD6V),其中 字符串题目:设计 Goal 解析器 - 图47 是字符串 字符串题目:设计 Goal 解析器 - 图48 的长度。需要遍历字符串一次。
  • 空间复杂度:字符串题目:设计 Goal 解析器 - 图49#card=math&code=O%28n%29&id=KoRRj),其中 字符串题目:设计 Goal 解析器 - 图50 是字符串 字符串题目:设计 Goal 解析器 - 图51 的长度。需要创建一个 字符串题目:设计 Goal 解析器 - 图52 类型的变量存储解析后的结果,长度不会超过 字符串题目:设计 Goal 解析器 - 图53