人物相关性分析Java_蓝桥杯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。

importjava.util.List;importjava.util.ArrayList;importjava.util.Scanner;importjavax.swing.text.DefaultEditorKit.InsertBreakAction;public classMain

{static List list = new ArrayList();//用来保存分割后的字符串

static List art = new ArrayList<>();//记录.出现的位置

static int number = 0;public static voidprint()

{for(String b:list)

{

System.out.println(b);

}

}public static voidfun(String string)

{int count = 0;char crt[] = string.toCharArray();//将字符串转为字符数组

for(charb:crt)

{if(b == ‘ ‘)

count++;else if(b == ‘.‘)

{

art.add(count);

count++;

}

}

}public static void insert()//将‘.‘插入到list中。

{int sum = 0;for(inti:art)

{

sum++;

list.add(i+sum,".");//将指定的元素添加到指定的位置

}

}public static void lon(List 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 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

{

lon(list1.subList(a1+1, b1), k);

list1.remove(a1);//移除

}else{

lon(list1.subList(b1+1, a1), k);

list1.remove(b1);

}

}

}public static voidmain(String[] args)

{//TODO Auto-generated method stub

Scanner scanner = newScanner(System.in);int k =scanner.nextInt();

Scanner scanner1= newScanner(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);

}

}

原文:https://www.cnblogs.com/zkw123/p/11966930.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值