请你设计一个可以解释字符串 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"
读完题目不难发现,我们要扮演的就是一个翻译角色,将G->G ()->o (al)->al。
所以我们中心思想就是设计一个循环,遍历第一个字符,然后输出,如此循环往复,就完成了。
所以二话不说我们开始:
先完成前期的准备,准备一个存储答案的字符串,另外准备一个表示字符下标的整型k
int k = 0; string ans;
k为字符下标,所以k小于字符长度作为while循环判断条件
接下来观察command里可能出现的情况
当k检索到G,则输出G,这相信是没有问题的。
但当k检索到‘(’我们就需要讨论,究竟是o,还是al
这时候我们就可以将k+1,看看下一个是),还是a,进行一个判断来决定输出什么字符。
若为),则输出o,后执行一个k+2(因为()占两个位置,我们需要下一次的k指向一种新的情况)
若为a,则输出al,后执行,一个k+4,理由同上。
到这里我们的主体就已经完成了,下面看代码
#include<iostream> #include<queue> using namespace std; class Solution { public: string interpret(string command) { int k = 0; string ans; while (k < command.size()) { if (command[k] == 'G') { ans.push_back(command[k]); k++; continue; } if (command[k] == '(') { if (command[k + 1] == ')') { ans.push_back('o'); k += 2; } else ans.push_back('a'); ans.push_back('l'); k += 4; continue; } } return ans; } };
总结:本题属于简单题,考虑了continue的使用,以及字符串的处理(push_back)。