聊斋(java)

某人读完《聊斋志异》,编出这样一道题。题目为:现有男鬼(b)、女鬼®、小鬼(w)共n人(n<1000),围站成一环(小鬼可以算是男的也可以算是女的)。从某人开始分别在两边数连续相同性别数(两边的性别可不同),直到第一次发现不同性别为止。当前数的这个人至少要同左右两边中的一方具有相同性别,并算到总数中去。

输入
第1行为人的数目n,第2行为n个字符(只有b,r,w三个情况)。但是经过发现,测试数据未必是n个字符,所以以实际字符数为准。

输出
可找到的连续最大同性别总数。

样例输入
29
wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
样例输出
11

思路:其实这题也不是完全自己写的,, 看了晚上大犇的解题。。之前一直没有想到他们是围成一环。。也就是从左边数和右边数是要一样的,所以要复制一段接在后边。。这才AC了

package javas.weleness.聊斋;

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = Integer.parseInt(scanner.nextLine());
		String s = scanner.nextLine();

		char[] ch = new char[1000];
		
		for (int i = 0; i < s.length(); i++) {
			ch[i] = s.charAt(i);
		}
		int index = 0;
		for (int i = s.length(); i < 2*s.length(); i++) {
			ch[i] = s.charAt(index);
			index++;
		}
		int a = 0;int b = 0; int w = 0;int max = 0;
		char c = '0';
		for (int i = 0; i < 2*n; i++) {
			if(ch[i]=='w') {
				b++;
				w++;//记录连续w的数
			}else if(ch[i]==c) {
				b++; // jilu前一个b/r连续的数目
				w=0;
			}
			else { // 此时找到一个结果,开始统计数目
				max = Math.max(a+b, max);
				a = b-w;
				b = w+1;
				w = 0;
				c=ch[i];//暂时存下需要比较的新的b/r
			}
		}
		
		max = Math.max(max, a+b);
		max = Math.min(max, n);// 连续的字串数不能超过最大长度。。
		System.out.println(max);
	}
	

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值