第十届蓝桥杯 C组人物相关性分析

试题 H: 人物相关性分析
时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分
【问题描述】
小明正在分析一本小说中的人物相关性。他想知道在小说中 Alice 和 Bob 有多少次同时出现。 更准确的说,小明定义 Alice 和 Bob“同时出现”的意思是:在小说文本 中 Alice 和 Bob 之间不超过 K 个字符。 例如以下文本: ThisisastoryaboutAliceandBob.AlicewantstosendaprivatemessagetoBob. 假设 K = 20,则 Alice 和 Bob 同时出现了 2 次,分别是”Alice and Bob” 和”Bob. Alice”。前者 Alice 和 Bob 之间有 5 个字符,后者有 2 个字符。 注意: 1. Alice 和 Bob 是大小写敏感的,alice 或 bob 等并不计算在内。 2. Alice 和 Bob 应为单独的单词,前后可以有标点符号和空格,但是不能 有字母。例如 Bobbi 並不算出现了 Bob。
【输入格式】
第一行包含一个整数 K。 第二行包含一行字符串,只包含大小写字母、标点符号和空格。长度不超 过 1000000。
【输出格式】
输出一个整数,表示 Alice 和 Bob 同时出现的次数。
【样例输入】
20 This is a story about Alice and Bob.Alice wants to send aprivate message to Bob.
————————————————

import java.util.Scanner;
import java.util.Vector;
 
public class Main {
	static boolean check(char C){
		if ((C>='a'&&C<='z')||(C>='A'&&C<='Z')) {
			return false;
		}
		return true;
	}
	public static void main(String[] args) {
		Vector<Integer> Alice = new Vector<Integer>();
		Vector<Integer> Bob = new Vector<Integer>();
		
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		String s = sc.nextLine();
		s = sc.nextLine();
		
		for (int i = 0; i+5 <= s.length(); i++) {
			if ((i==0 || check(s.charAt(i-1))) && (i+5==s.length() || check(s.charAt(i+5)))) {
				if (s.substring(i, i+5).equals("Alice")) {
					Alice.add(i);
				}
			}
		}
		for (int i = 0; i+3 <= s.length(); i++) {
			if ((i==0 || check(s.charAt(i-1))) && (i+3==s.length() || check(s.charAt(i+3)))) {
				if (s.substring(i, i+3).equals("Bob")) {
					Bob.add(i);
				}
			}
		}
		int ans = 0;
		for (int i = 0; i < Alice.size(); i++) {
			int l =0,r=-1;
			while(r+1 < Bob.size() && Alice.get(i) > Bob.get(r+1)  ) {
				r++;
			}
			while (l<=r && Alice.get(i) >Bob.get(l)+n+3  ) {
				l++;
			}
			ans += r-l+1;
		}
		
		for (int i = 0; i < Bob.size(); i++) {
			int l  =0,r=-1;
			while(r+1 < Alice.size() && Bob.get(i) > Alice.get(r+1)  ) {
				r++;
			}
			while (l<=r && Bob.get(i) >Alice.get(l)+n+5  ) {
				l++;
			}
			ans += r-l+1;
		}
		System.out.println(ans);
	}
}

你可能感兴趣的:(字符串,java)