ECNU 2820 围栏
链接
https://acm.ecnu.edu.cn/problem/2820
题目
单点时限: 2.0 sec
内存限制: 256 MB
一串连续字符被称作围栏当且仅当它由间隔的 | 和 - 组成。比如 |-|-|-| 或 -|-|。注意 |-||-| 或者 -- 不是围栏,因为每个都包含了两个或两个以上的相同连续字符。给你一个字符串,请找出它的最长的一个可以称作围栏的子串长度。
输入格式
一个长度为 n 的字符串 , 只包含 |、- 字符。
输出格式
在一行中输出最长的围栏长度值。
样例
input
|||-||--|--|---|-||-|-|-|--||---||-||-||-|--||
output
8
提示
单独的一个|或- 字符算作长度为 1 的围栏。
思路
只需要遍历即可,从头到尾,若这一个和上一个不同,就在当前长度上+1,若相同,就重置长度为1,最后用max记录途中的最大值。
代码
public static void fun() {
Scanner sc = new Scanner(System.in);
String line = sc.next();
StringBuffer sb = new StringBuffer(line);
int len = sb.length();
int n = 1;
int max = 1;
char tmp = sb.charAt(0);
for (int i = 1; i < len; i++) {
if (sb.charAt(i) != tmp) {
n++;
if (n > max) {
max = n;
}
} else {
n = 1;
}
tmp = sb.charAt(i);
}
if (len == 0) {
max = 0;
}
System.out.print(max);
}