#24902. 移位字符串

内存限制:512 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: root

题目描述

给定一个字符串,其中,即该字符串由小写字母和左右小括号组成。特别地,我们保证字符串是括号匹配的。

对于每一对匹配的括号,我们想要将这对括号间的所有字母做循环后移一位的变换。例如:后移一位为,后移一位为 ... 后移一位为。因为括号是可以嵌套的,所以小写字母也可能被后移多位:例如,对于串,字母被后移一位,而被后移两位。

现在,请你输出对字符串中所有小写字母做对应后移变换后的结果。注意,输出的字符串中不含""或者""。

对于括号匹配问题不熟悉的同学,请移步本题最后的分析部分。

输入格式

第一行一个整数,表示即将输入的字符串的长度;

第二行一个字符串,含义如题目描述所示。特别地,我们保证输入的字符串是括号匹配的。

输出格式

共一行,一个字符串,表示对字符串中所有小写字母做问题描述中后移变换后的结果。

样例

样例输入1

5
(mit)

样例输出1

nju

样例输入2

10
x(a(bc)d)y

样例输出2

xbdeey

数据范围与提示

对于的数据,,保证输入的字符串是括号匹配的,并且保证中包含的匹配括号对数量不大于1;

对于另外的的数据,,保证输入的字符串是括号匹配的,无其它保证;

对于另外的的数据,,保证输入的字符串是括号匹配的,无其它保证。

strlen for 中算,爆零两行泪

提示

括号匹配问题指的是,给定一个括号匹配串,要求输出所有配对的左右圆括号对的下标(从0开始,每行两个数)。其中,串被称作括号匹配串,当且仅当:

  1. ,其中字符串中不包含左右括号;或者
  2. ,其中是括号匹配串,此时最左和最右的括号匹配;或者
  3. ,其中均为括号匹配串。

我们来简单分析下这个问题:看起来括号匹配串是一个递归定义,但我们可以线性地求解它。对于一个括号匹配串,为了方便,我们假设它只包含左右圆括号的字母。从左到右看它的每一个字母,我们发现每个右括号一定匹配在它左边最近的还未被匹配的左括号。

例如:对于串 ,当我们看到下标为2的右括号时,其左边最近的还未被匹配的左括号下标为1;当我们看到下标为4的右括号时,其左边最近的还未被匹配的左括号下标为3;当我们看到下标为5的右括号时,其左边最近的还未被匹配的左括号下标为0(因为1,3已经被匹配);

从左到右扫描,后被看到的左括号先被右括号匹配,所以这是一个后进先出的结构。