ECNU 2820 围栏

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);
  }
原文地址:https://www.cnblogs.com/blogxjc/p/14382780.html