import java.util.*;
/*
プログラミングのお題スレ Part15
//mevius.5ch.net/test/read.cgi/tech/1564310397/32
> 32 名前:デフォルトの名無しさん[sage] 投稿日:2019/07/31(水) 17:25:11.51 ID:6BPSvdm1
> プログラミングのお題スレ Part14
> //mevius.5ch.net/test/read.cgi/tech/1558168409/981-986
>
> 漏れは、前スレの981 ではないですが、この問題の応用で、
>
> 括弧のネストの深さの最大値を求めよ
>
> 括弧の対応が取れていない場合は、-1 を出力せよ。
> 2種類の括弧が順序通りに、閉じていないものも、-1 です
>
> ヒント : stack を使うと良いかも
>
> "" => 0
> "( )" => 1
> "{ ( { ( ) } ( ) ) } ( )" => 4
>
> "} {" => -1
> "( { ) }" => -1
*/
class Ideone
{
public static void main
(String[] args
) {
try (Scanner in
= new Scanner
(System.
in)) {
while (in.hasNextLine())
{
System.
out.
printf("\"%s\" => %d%n", line, countNest
(line
)); }
}
}
static int countNest
(String s
) {
int[] stack = new int[8];
int count = 0;
int max = 0;
for (int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
int brackets = "({)}".indexOf(c);
if (brackets == -1) continue;
if ((brackets & 2) == 0)
{
if (count
== stack.
length) stack
= Arrays.
copyOf(stack, stack.
length * 2); stack[count] = brackets & 1;
if (++count > max) max = count;
} else if (--count < 0 || (brackets & 1) != stack[count]) return -1;
}
return count == 0 ? max : -1;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKLyoK44OX44Ot44Kw44Op44Of44Oz44Kw44Gu44GK6aGM44K544OsIFBhcnQxNSAKLy9tZXZpdXMuNWNoLm5ldC90ZXN0L3JlYWQuY2dpL3RlY2gvMTU2NDMxMDM5Ny8zMgoKPiAzMiDlkI3liY3vvJrjg4fjg5Xjgqnjg6vjg4jjga7lkI3nhKHjgZfjgZXjgpNbc2FnZV0g5oqV56i/5pel77yaMjAxOS8wNy8zMSjmsLQpIDE3OjI1OjExLjUxIElEOjZCUFN2ZG0xCj4g44OX44Ot44Kw44Op44Of44Oz44Kw44Gu44GK6aGM44K544OsIFBhcnQxNAo+IC8vbWV2aXVzLjVjaC5uZXQvdGVzdC9yZWFkLmNnaS90ZWNoLzE1NTgxNjg0MDkvOTgxLTk4Ngo+IAo+IOa8j+OCjOOBr+OAgeWJjeOCueODrOOBrjk4MSDjgafjga/jgarjgYTjgafjgZnjgYzjgIHjgZPjga7llY/poYzjga7lv5znlKjjgafjgIEKPiAKPiDmi6zlvKfjga7jg43jgrnjg4jjga7mt7HjgZXjga7mnIDlpKflgKTjgpLmsYLjgoHjgogKPiAKPiDmi6zlvKfjga7lr77lv5zjgYzlj5bjgozjgabjgYTjgarjgYTloLTlkIjjga/jgIEtMSDjgpLlh7rlipvjgZvjgojjgIIKPiAy56iu6aGe44Gu5ous5byn44GM6aCG5bqP6YCa44KK44Gr44CB6ZaJ44GY44Gm44GE44Gq44GE44KC44Gu44KC44CBLTEg44Gn44GZCj4gCj4g44OS44Oz44OIIDogc3RhY2sg44KS5L2/44GG44Go6Imv44GE44GL44KCCj4gCj4gIiIgPT4gMAo+ICIoICkiID0+IDEKPiAieyAoIHsgKCApIH0gKCApICkgfSAoICkiID0+IDQKPiAKPiAifSB7IiA9PiAtMQo+ICIoIHsgKSB9IiA9PiAtMQoqLwpjbGFzcyBJZGVvbmUKewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgIHsKICAgICAgICB0cnkgKFNjYW5uZXIgaW4gPSBuZXcgU2Nhbm5lcihTeXN0ZW0uaW4pKQogICAgICAgIHsKICAgICAgICAgICAgd2hpbGUgKGluLmhhc05leHRMaW5lKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFN0cmluZyBsaW5lID0gaW4ubmV4dExpbmUoKTsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRmKCJcIiVzXCIgPT4gJWQlbiIsIGxpbmUsIGNvdW50TmVzdChsaW5lKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgc3RhdGljIGludCBjb3VudE5lc3QoU3RyaW5nIHMpCiAgICB7CiAgICAgICAgaW50W10gc3RhY2sgPSBuZXcgaW50WzhdOwogICAgICAgIGludCBjb3VudCA9IDA7CiAgICAgICAgaW50IG1heCA9IDA7CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5sZW5ndGgoKTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgY2hhciBjID0gcy5jaGFyQXQoaSk7CiAgICAgICAgICAgIGludCBicmFja2V0cyA9ICIoeyl9Ii5pbmRleE9mKGMpOwogICAgICAgICAgICBpZiAoYnJhY2tldHMgPT0gLTEpIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoKGJyYWNrZXRzICYgMikgPT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGNvdW50ID09IHN0YWNrLmxlbmd0aCkgc3RhY2sgPSBBcnJheXMuY29weU9mKHN0YWNrLCBzdGFjay5sZW5ndGggKiAyKTsKICAgICAgICAgICAgICAgIHN0YWNrW2NvdW50XSA9IGJyYWNrZXRzICYgMTsKICAgICAgICAgICAgICAgIGlmICgrK2NvdW50ID4gbWF4KSBtYXggPSBjb3VudDsKICAgICAgICAgICAgfSBlbHNlIGlmICgtLWNvdW50IDwgMCB8fCAoYnJhY2tldHMgJiAxKSAhPSBzdGFja1tjb3VudF0pIHJldHVybiAtMTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBjb3VudCA9PSAwID8gbWF4IDogLTE7CiAgICB9Cn0=