从左到右处理字符串。对当前位置 i 的原字符 c:
维护两个数组:
cntLeft[c]:已经处理完的左侧字符中,最终等于 c 的个数。
cntRight[c]:当前位置右侧尚未处理的原字符串中,等于 c 的个数。
在蝴蝶乐园里,有一串写着小写字母的标牌。给你一个长度为n的字符串 s,你需要按从左到右的顺序,依次处理位置 1 到n。
当你处理到位置i 时,字符串的前半部分(位置 1 到i−1)已经可能被你改过;后半部分(位置 i+1 到 n)还没有被处理,仍是原来的字符。
对每个位置i,执行以下规则一次:
令 c表示当前位置 i 的字符(处理这一位之前的字符);
令x 表示在位置i 左侧(位置 1 到 i−1)中,字符等于c的个数(注意:左侧这些字符已经是处理后的最终字符);
令y 表示在位置i右侧(位置i+1到 n)中,字符等于 c 的个数(注意:右侧这些字符还没被处理,仍是原串字符);
如果x=y,就把位置i 的字符改成字典序的下一个字符;也就是:
'z',则变为 'a';如果x=y,则位置 i 的字符不变。
每个测试文件均包含多组测试数据。第一行输入一个整数 t (1≤t≤2×105) 代表数据组数,每组测试数据描述如下:
除此之外,保证单个测试文件的 n 之和不超过 4×105。
对于每一组测试数据,新起一行。输出最终的字符串s
输入
3
1
a
3
aba
3
zzz
输出
b
aca
zaz