题目:
试题 H: 人物相关性分析
时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分
【问题描述】
小明正在分析一本小说中的人物相关性。他想知道在小说中 Alice 和 Bob
有多少次同时出现。
更准确的说,小明定义 Alice 和 Bob“同时出现”的意思是:在小说文本
中 Alice 和 Bob 之间不超过 K 个字符。
例如以下文本:
This is a story about Alice and Bob. Alice wants to send a private message to Bob.
假设 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 a private message to Bob.
【样例输出】
2
【评测用例规模与约定】
对于所有评测用例,1 ≤ K ≤ 1000000。
分析:
首先先把这行代码转为数组,但保留空格和符号,然后遍历数组只要数组中有等于Alice的那么从下一项开始寻找Bob,找到之后,把他们两中间的所有字符串长度加起来,就是他们两中间的长度,只要这个长度小于等于k就是符合规定的,count加一
第二段代码先是查找Bob然后再查找Alice。方法一样
下面是题目中用到的字符
"\\s" 一个空格
"\\." 字符.
步骤:
package 第十届省赛;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;
public class 人物相关性分析 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int k = scanner.nextInt(); // 最大间距值
scanner.nextLine();// 吸取回车键换行
String str1 = scanner.nextLine(); // 字符串
int count = 0; // 答案
// 1、按空格和.进行分割字符串
String[] st = str1.split("\\s+|\\.");
System.out.println(Arrays.toString(st));
for (int i = 0; i < st.length; i++) {
if (st[i].equals("Alice")) {
for (int j = i + 1; j < st.length; j++) {
if (st[j].equals("Bob")) {
int sum = 1;
for (int a = i + 1; a < j; a++) {
sum += st[a].length() + 1;
}
if (sum <= k) {
System.out.println("间距为" + sum);
count++;
}
}
}
}
}
for (int i = 0; i < st.length; i++) {
if (st[i].equals("Bob")) {
for (int j = i + 1; j < st.length; j++) {
if (st[j].equals("Alice")) {
int sum = 1;
for (int a = i + 1; a < j; a++) {
sum += st[a].length() + 1;
}
if (sum <= k) {
System.out.println("间距为" + sum);
count++;
}
}
}
}
}
System.out.println(count);
}
}