题目大意

我们将重复的 $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;
}