本题可以使用线性扫描算法解决。
锚点字符只有小写字母 o、大写字母 O 和数字 0。
一个子串只要求首字符和尾字符都是锚点字符,中间的字符没有任何限制。
因此,如果字符串中存在锚点字符,那么最长的锚定片段一定从最靠左的锚点字符开始,并在最靠右的锚点字符结束。
在文字定位算法中,小写字母 o、大写字母 O 和数字 0 由于形态相近,常被用作视觉锚点(anchor)。如果一个非空字符串的第一个字符和最后一个字符都属于锚点字符,则称该字符串为“锚定片段”。现在给定一个长度为 n 的字符串 s,你可以从 s 中截取一个连续子串,请求出其中最长的锚定片段的长度。如果找不到任何锚定片段,则输出 0。
数据范围:字符串长度 n 满足 1≤n≤120000。字符串仅由大小写英文字母和数字组成。
第一行包含一个整数 n (1≤n≤120000),表示字符串 s 的长度。 第二行包含一个长度为 n 的字符串 s,仅由大小写英文字母和数字组成。
输出一个整数,表示最长锚定片段的长度。
输入
5
oabcO
输出
5
说明
字符串为 oabcO,其中包含两个锚点字符:开头的 o 和结尾的 O。最左锚点位置为 0,最右锚点位置为 4,最长锚定片段的长度为 4−0+1=5,即整个字符串本身。
输入
3
a0b
输出
1
说明
字符串 a0b 中仅有一个锚点字符 0,位于位置 1。最左和最右锚点均为该位置,片段 0 本身满足首尾均为锚点的条件,长度为 1−1+1=1。
输入
4
abcd
输出
0
说明
字符串 abcd 中没有任何锚点字符(o、O、0),无法构成锚定片段,因此输出 0。
输入
6
0oooOO
输出
6
说明
字符串 0oooOO 中的每一个字符都是锚点。最左锚点为开头的 0(位置 0),最右锚点为结尾的 O(位置 5),最长锚定片段覆盖整个字符串,长度为 5−0+1=6。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.