蓝桥杯javaB组--人物相关性分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

蓝桥杯javaB组--⼈物相关性分析
【问题描述】
⼩明正在分析

本⼩说中的⼈物相关性。

他想知道在⼩说中 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.
试题H: ⼈物相关性分析 12第⼗届蓝桥杯⼤赛软件类省赛 Java ⼤学 B 组
【样例输出】
2
【评测⽤例规模与约定】
对于所有评测⽤例,1 ≤ K ≤ 1000000。

import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.text.DefaultEditorKit.InsertBreakAction;
public class Main
{
static List<String> list = new ArrayList();//⽤来保存分割后的字符串
static List<Integer> art = new ArrayList<>();//记录.出现的位置
static int number = 0;
public static void print()
{
for(String b:list)
{
System.out.println(b);
}
}
public static void fun(String string)
{
int count = 0;
char crt[] = string.toCharArray();//将字符串转为字符数组
for(char b:crt)
{
if(b == ' ')
count++;
else if(b == '.')
{
art.add(count);
count++;
}
}
}
public static void insert()//将'.'插⼊到list中。

{
int sum = 0;
for(int i:art)
{
sum++;
list.add(i+sum,".");//将指定的元素添加到指定的位置
}
}
public static void lon(List<String> list2,int k)//判断两个之间长度是否⼩于k {
int lonK = 0;
for(String str1:list2)
{
lonK += str1.length();
}
if(lonK<=k)
{
number++;
}
}
public static void ifmanzu(int k)//判断是否满组条件的个数
{
//list.sublList(0,3) //将字符串的0到3,取出来
int begin = 0;
List<String> list1 = list.subList(begin, list.size());
while(true)
{
//System.out.println(list1);
int a1 = list1.indexOf("Alice");//找出列表中Allice 第⼀次出现的位置
int b1 = list1.indexOf("Bob");//找到列表中Bob第⼀次出现的位置
if(a1==-1||b1==-1)//没有同时出现的了
{
break;
}
if(a1<b1)//表⽰a1在前⾯
{
lon(list1.subList(a1+1, b1), k);
list1.remove(a1);//移除
}
else
{
lon(list1.subList(b1+1, a1), k);
list1.remove(b1);
}
}
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
int k = scanner.nextInt();
Scanner scanner1 = new Scanner(System.in);
String string = scanner1.nextLine();
fun(string);
//String [] a = string.split("\\s+");//按空格截取 String [] a = string.split("[ \\.]");
for(String b:a)
{
list.add(b);
}
insert();//将'.'插⼊到list中
ifmanzu(k);
System.out.println(number);
//System.out.println(art);
}
}。

相关文档
最新文档