字符串题目:设计 Goal 解析器

2023-11-03

题目

标题和出处

标题:设计 Goal 解析器

出处:1678. 设计 Goal 解析器

难度

2 级

题目描述

要求

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

给你字符串 command \texttt{command} command,返回 Goal 解析器 command \texttt{command} command 的解释结果。

示例

示例 1:

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

示例 2:

输入: command   =   "G()()()()(al)" \texttt{command = "G()()()()(al)"} command = "G()()()()(al)"
输出: "Gooooal" \texttt{"Gooooal"} "Gooooal"

示例 3:

输入: command   =   "(al)G(al)()()G" \texttt{command = "(al)G(al)()()G"} command = "(al)G(al)()()G"
输出: "alGalooG" \texttt{"alGalooG"} "alGalooG"

数据范围

  • 1 ≤ command.length ≤ 100 \texttt{1} \le \texttt{command.length} \le \texttt{100} 1command.length100
  • command \texttt{command} command "G" \texttt{"G"} "G" "()" \texttt{"()"} "()" 和/或 "(al)" \texttt{"(al)"} "(al)" 按某种顺序组成

解法

思路和算法

由于给定的字符串 command \textit{command} command “G" \text{``G"} “G" “()" \text{``()"} “()" 和/或 “(al)" \text{``(al)"} “(al)" 按某种顺序组成,因此一定可以正确地解析字符串 command \textit{command} command,不需要考虑不合法的情况。

从左到右遍历字符串 command \textit{command} command,使用 StringBuffer \texttt{StringBuffer} StringBuffer 类型的变量存储解析之后的结果。具体而言,根据当前字符和下一个字符决定当前需要解析的字符个数。

  • 如果当前字符是 ‘G’ \text{`G'} ‘G’,则当前需要解析 1 1 1 个字符,解析结果是 “G" \text{``G"} “G"

  • 如果当前字符是 ‘(’ \text{`('} ‘(’,则根据下一个字符解析:

    • 如果下一个字符是 ‘)’ \text{`)'} ‘)’,则当前需要解析 2 2 2 个字符,解析结果是 “o" \text{``o"} “o"

    • 如果下一个字符不是 ‘)’ \text{`)'} ‘)’,则当前需要解析 4 4 4 个字符,解析结果是 “al" \text{``al"} “al"

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

代码

class Solution {
    public String interpret(String command) {
        int length = command.length();
        StringBuffer sb = new StringBuffer();
        int index = 0;
        while (index < length) {
            char c = command.charAt(index);
            if (c == 'G') {
                sb.append("G");
                index++;
            } else {
                if (command.charAt(index + 1) == ')') {
                    sb.append("o");
                    index += 2;
                } else {
                    sb.append("al");
                    index += 4;
                }
            }
        }
        return sb.toString();
    }
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是字符串 command \textit{command} command 的长度。需要遍历字符串一次。

  • 空间复杂度: O ( n ) O(n) O(n),其中 n n n 是字符串 command \textit{command} command 的长度。需要创建一个 StringBuffer \texttt{StringBuffer} StringBuffer 类型的变量存储解析后的结果,长度不会超过 n n n

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字符串题目:设计 Goal 解析器 的相关文章

随机推荐

  • 【TVM 学习资料】使用 Python 接口(AutoTVM)编译和优化模型

    本篇文章译自英文文档 Compiling and Optimizing a Model with the Python Interface AutoTVM 作者是 Chris Hoge 更多 TVM 中文文档可访问 TVM 中文站 TVMC
  • 14.navigator.userAgent属性检查浏览器类型

    如何使用navigator userAgent属性检查浏览器类型 navigator userAgent属性是什么 是个只读的字符串 声明浏览器用于HTTP请求的用户代理头的值 如何检查 let a navigator userAgent
  • SQLyog中文乱码的解决方案(中文显示成问号)

    问题描述 在SQLyog中键入的中文都变成了 如下图所示 解决方案 找到乱码的字段 右击然后选择 管理字段 在弹出的页面里点击 隐藏语言选项 取消隐藏 然后就可以看到Charset列 如下图所示 更改Charset列 选择utf8 之后点击
  • ld: warning: object file (/path/WYDemo.framework/WYDemo(WYSingleton.o)) was built for newer iOS vers...

    1 出现场景 1 在制作 WYDemo framework 工程中的 Development target 为 11 2 2 在使用 WYDemo framework 工程中的 Development target 为 8 0 2 解决方案
  • Scrach基本概念与操作

    基本概念 一个程序最初的触发是由事件 黄色积木 负责的 例如点击播放事件 按下空格事件 当接收到消息等 程序由舞台和角色组成 舞台和角色都可以有多个 Scratch本身提供了许多舞台和角色的素材 可直接使用 每个角色都有自己的脚本代码 由各
  • Using join buffer (Batched Key Access)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Using join buffer Batched Key Access 表连接算法 Batched Key Access BKA 原理 MySQL 5 6版本提供了很多性
  • 利用循环输出文字

    首先设置一个循环的函数 var arr 1 var i 0 function xh i arr var arr 1 var i 0 if i gt arr false else document write 人类的本质是复读机 xh if
  • Windows 安装yolo v4时 Cmake无法检测到CUDA的问题

    最近因为装yolov4真的是头发掉了一大把 好不容易避开了众多坑之后 结果Cmake检测不到CUDA了 具体的安装步骤参照了以下文章 https blog csdn net shuaijieer article details 106150
  • GTest源码剖析(六)——RUN_ALL_TESTS

    GTest源码剖析 RUN ALL TESTS GTest源码剖析RUN ALL TESTS RUN ALL TESTS源码分析 1 UnitTestRun 2 HandleExceptionsInMethodIfSupported 3 U
  • 【华为OD机试真题 JAVA】检查是否存在满足条件的数字组合

    JS版 华为OD机试真题 JS 检查是否存在满足条件的数字组合 标题 检查是否存在满足条件的数字组合 时间限制 1秒 内存限制 262144K 语言限制 不限 给定一个正整数数组 检查数组中是否存在满足规则的数字组合 规则 A B 2C 输
  • 刷入magisk无限重启_Magisk的安装与使用

    随着安卓版本的升级 SuperSU和Xposed的用户越来越少 人们需要一个替代者 于是Magisk出现在大家的视野 本文将对Magisk的安装和使用进行介绍 01 如何安装Magisk首先下载一个Magisk Manager 地址http
  • Linux之执行一个可执行文件

    Linux中执行一个可执行文件 在Linux系统中执行一个可执行文件 只需写正确文件路径 即可执行文件 不需要写命令 1 如果执行当前路径下的文件 文件名 2 执行非当前目录下的文件 文件的绝对路径 注意 以上操作的前提条件 文件是可执行文
  • 想从事区块链开发? 你应该这么做

    凭借每年15 4万美元的平均工资和稳定的就业增长 现在是学习区块链开发的理想时机 为了创建和改进区块链技术 区块链开发人员练习各种技能 包括计算机网络 密码学 算法和数据结构 这些开发人员负责设计以特定业务模型为中心的区块链技术 然后构建
  • 设计模式入门(二)观察者模式

    设计模式入门 本系列所有内容参考自 HeadFirst设计模式 因为书中的代码是采用java语言写的 博主这里用C 语言改写 这里采用讲故事的方式进行讲解 若有错误之处 非常欢迎大家指导 设计模式 模式不是代码 而针对设计问题的通用解决方案
  • unity打包出现 Failed to re-package resources

    unity打包出现 Failed to re package resources unity打包出现 Failed to re package resources 在对新项目打包发布的时候出现报错提示 这个问题我搜了很多博客都没有答案 最后
  • Visual Studio Code安装支持Lua并打开函数列表

    Visual Studio Code安装支持Lua并打开函数列表 文章目录 Visual Studio Code安装支持Lua并打开函数列表 一 下载安装 1 下载 2 windows下安装 以下过程适用于1 44 2版本 3 win10下
  • 从零用自己数据跑R3LIVE

    1 相机内参标定 相机选用4mm的广角相机 相机内参标定选择用最常见的棋盘格方法 首先安装ROS自带的包 sudo apt install ros melodic camera calibration 用usb cam启动相机后进行标定 r
  • 【JS】npm electron 开发桌面应用-npm run-script package打包

    一 准备工作 首先 我们要安装electron prebuilt 它是一个npm模块 因此我们可以使用Npm来进行安装 它是一个electron的预编译版本 cnpm install g electron prebuilt 接下来安装ele
  • [已解决]WARNING: IPv4 forwarding is disabled

    问题描述 docker info WARNING IPv4 forwarding is disabled WARNING bridge nf call iptables is disabled WARNING bridge nf call
  • 字符串题目:设计 Goal 解析器

    文章目录 题目 标题和出处 难度 题目描述 要求 示例 数据范围 解法 思路和算法 代码 复杂度分析 题目 标题和出处 标题 设计 Goal 解析器 出处 1678 设计 Goal 解析器 难度 2 级 题目描述 要求 请你设计一个可以解释