[USACO1.1] 坏掉的项链 Broken Necklace Java
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();String str = sc.next();sc.close();str += str; // 模拟环形两端连接int max = 0;for (int i = 0; i < n; i++) {int l = i, r = i + 1;char lc = str.charAt(l), rc = str.charAt(r);if (lc == 'w') { // 往左查找到第一颗非白珠子int k = l - 1;while (k >= 0 && str.charAt(k) == 'w') k--;lc = k >= 0 ? str.charAt(k) : 'r'; // 找不到则默认红色}if (rc == 'w') { // 往右查找到第一颗非白珠子int k = r + 1;while (k < str.length() && str.charAt(k) == 'w') k++;rc = k < str.length() ? str.charAt(k) : 'b'; // 找不到则默认蓝色}int ans = 0;// 左端连续的非白珠子数while (l >= 0 && (str.charAt(l) == lc || str.charAt(l) == 'w')) {ans++;l--;}// 右端连续的非白珠子数while (r < n * 2 && (str.charAt(r) == rc || str.charAt(r) == 'w')) {ans++;r++;}max = Math.max(max, Math.min(ans, n)); // 取最大值同时防止ans超过总数n}System.out.println(max);}
}
每日一水~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~