题目大意
我们将重复的 $n$ 个字符串 S 压缩为 [nS],且存在多重压缩。给定一个压缩结果,展开它。
分析
我考虑用类似状态机的方式解析字符串。
- 当读到正常字符时,把它添到 $s$ 末尾
- 读到左括号时,则递归
read(),重复 $n$ 遍添到 $s$ 末尾 - 右括号或文本结束则返回 $s$
写成 BNF 更直观一点
<pwd> ::= <EMPTY>
| {<ALPHA>}
| <pwd> "[" <NUMBER> <pwd> "]" <pwd>
string read() {
string s = "";
char c;
while (cin >> c) {
if (c == '[') {
int n;
cin >> n;
string ts = read();
while (n--)
s += ts;
} else if (c == ']') {
return s;
} else {
s += c;
}
}
return s;
}
int main() {
cout << read();
return 0;
}