JOIOI 塔
题号:NC53185
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld

题目描述

本题译自 JOI 2013 Final T4「JOIOIの塔
JOIOI塔是一种单人游戏。
这个游戏要用到一些写有J,O,I中任一文字的圆盘。这些圆盘的直径互不相同。游戏开始时,这些圆盘按照直径大的在下面的规则堆叠。你需要用这些圆盘做尽量多的迷你JOIOI塔。迷你JOIOI塔由3个圆盘构成,从直径较小的圆盘开始分别为J,O,I或分别为I,O,I。不过,每个圆盘最多只能使用一次。
3ab6e7ae407ceb0dbca914b199af6144.png任务
给出长为N的字符串S,表示直径从小到大的圆盘上的文字。请编写程序求出使用这些圆盘能够做出的迷你JOIOI塔个数的最大值。

输入描述:

第一行为一个整数$N$,表示字符串$S$的长度。第二行是一个字符串$S$。

输出描述:

输出一行一个整数:表示能够做出的迷你JOIOI塔数量的最大值。
示例1

输入

复制
6
JOIIOI

输出

复制
2

说明

JOIIOI分别含子串JOI和子串IOI各一个,故可以做出2个迷你JOIOI塔。
示例2

输入

复制
5
JOIOI

输出

复制
1

说明

虽然JOIOI也分别含子串JOI和子串IOI各一个,但每个字符不能被使用两次或以上。
示例3

输入

复制
6
JOIOII

输出

复制
2

说明

此样例对应题目描述中的例子。
示例4

输入

复制
15
JJOIIOOJOJIOIIO

输出

复制
4

备注:

对于所有数据,

CC-BY-SA,感谢LOJ分享,译文来自 https://loj.ac/problem/2764