人物相关性分析---蓝桥杯JAVA

本文介绍如何使用Python编程实现小说中Alice和Bob的同步出现次数分析,利用窗口定位法解决字符限制问题,快速找出两者在文本中不超过K字符间隔的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.io.BufferedInputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;


public class Main {

	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		ArrayList<Integer> a=new ArrayList<>();//储存alice的位置
		ArrayList<Integer> b=new ArrayList<>();//储存bob的位置
		int k=scanner.nextInt();
		scanner.nextLine();
		String string=scanner.nextLine();
		int alice=0;//alice的标志位
		int bob=0;//bob的标志位
		int c=0;
		for(int j=0;j<string.length()-3;j++)
		{
			alice = 0;
			bob = 0;
			if(string.startsWith("Alice", j)||string.startsWith("Bob", j))//用if判断一下减少时间复杂度
			{
				for(int i=j;i<i+8+k;i++)//确定窗口的大小 在窗口内寻找
				{
					if(string.startsWith("Alice", i)&&i<=i+3+k)
					{
						a.add(i);//发现alice 并把alice存入列表
						alice=1;//发现的标志
					}
					if(string.startsWith("Bob", i)&&i<=i+5+k)
					{
						b.add(i);//发现bob 并把bob存入列表
						bob=1;//发现的标志
					}
					
					if(alice==1&&bob==1)//同时发现alice和bob
					{
						c++; //数量加一
						alice=0;//重新置零
						bob=0;//重新置零
						j=i;//从当前位置开始继续搜索
						break;//跳出当前循环
					}
				}
			}

		
		}
		System.out.print(c);
		
		
	}
	
	
}

人物相关性分析 2019年
【问题描述】 小明正在分析一本小说中的人物相关性。 他想知道在小说中 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 个字符。 注意 :

Alice 和 Bob 是大小写敏感的, alice 或 bob 等并不计算在内。

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 。

思路:窗口定位法  窗口大小为 8+k-搜索字符的长度 

然后移动窗口即可 一开始窗口一个一个的移动 如果找到一个alice和bob同时存在的情况 就从找到的位置break当前循环 并在该位置之后继续寻找,避免重复查找

喜欢就点个赞 或者关注支持一下阿
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值