您将得到一个字符串s。保证字符串相等,并且至少有一个[s和]s,并且保证括号是平衡的。该字符串还可以有其他字符。
目标是输出/返回一个元组列表或包含每个[和]对索引的列表。
示例:!^45sdfd[hello world[[djfut]%%357]sr[jf]s][srtdg][]应该返回
[(8, 41), (20, 33), (21, 27), (36, 39), (42, 48), (49, 50)]或类似于此的东西。元组是不必要的。也可以使用列表。
测试用例:
input:[[asdf][][td([)ty54g% ]hg[[f]u][f[[jhg][gfd]sdf]sdfs]ghd]fr43f]
output:[(0, 62),(1, 6), (7, 8), (9, 56), (13, 22), (25, 30), (26, 28), (31, 52), (33, 47), (34, 38), (39, 43)]
input:[[][][][]][[][][][[[[(]]]]]))
output:[(0, 9), (1, 2), (3, 4), (5, 6), (7, 8), (10,26),(11, 12), (13, 14), (15, 16), (17, 25), (18, 24), (19, 23), (20, 22)]
input:[][][[]]
output:[(0, 1), (2, 3), (4, 7), (5, 6)]
input:[[[[[asd]as]sd]df]fgf][][]
output:[(0, 21), (1, 17), (2, 14), (3, 11), (4, 8), (22, 23), (24, 25)]
input:[]
output:[(0,1)]
input:[[(])]
output:[(0, 5), (1, 3)]这是密码-高尔夫,所以每种编程语言的最短代码(以字节为单位)获胜。
发布于 2018-06-07 20:53:05
发布于 2018-06-07 17:19:52
发布于 2018-06-07 18:50:02
将输入字符串作为Unicode代码点的int[]的void。
s->{int r=0,w=0;for(var c:s){if(c==91)s[w++]=r;if(c==93)System.out.println(s[--w]+","+r);r++;}}s -> {
int r = 0, w = 0;
for (var c : s) {
if (c == 91)
s[w++] = r;
if (c == 93)
System.out.println(s[--w] + "," + r);
r++;
}
}https://codegolf.stackexchange.com/questions/166457
复制相似问题