2019蓝桥杯省赛B组JAVA人物相关性

2019蓝桥杯省赛B组JAVA人物相关性

//初学者勿喷。
【问题描述】
小明正在分析一本小说中的人物相关性。他想知道在小说中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
————————————————
版权声明:本文为CSDN博主「蔚蓝不远」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44723496/article/details/108687497
import java.util.Scanner;
public class Main {

public static void main(String[] args) {
	Scanner in=new Scanner(System.in);
    int a=in.nextInt();
    String str1=in.nextLine();
    String str=in.nextLine();
    int ans=0;
    System.out.println(str.length());
   int  B[]=new int[str.length()];       
    int A[]=new int[str.length()];
    int  B1[]=new int[str.length()];       
    int A1[]=new int[str.length()];
    
    int i=1,j=1;
    while(i<str.length()&&B[i-1]!=-1)
    {
    B[i]=str.indexOf("Bob",B[i-1]+1);
    i++;
    
    }
    
    while(j<str.length()&&A[j-1]!=-1)
    {
   A[j]=str.indexOf("Alice",A[j-1]+1);
   j++;
    
    }
  
    int k=0,o=0;
    for(int s=1;s<i;s++)
    {if(B[s]>0)
    	{B1[k]=B[s];
    ++k;}
    }
    
    for(int y=0;y<k;y++)
        System.out.println(B1[y]);
    for(int l=1;l<j;l++)
    {if(A[l]>0)
    	{A1[o]=A[l];
    ++o;}
    }
    System.out.println("o="+o);
    for(int x=0;x<o;x++)
        System.out.println(A1[x]);
    for(int z=0;z<k;z++)
    	for(int x=0;x<o;x++)
    	{
    		if(B1[z]>A1[x])
    			{if(B1[z]-A1[x]<=a+4)
    			ans++;}
    			else
    				{if(A1[x]-B1[z]<=a+2)
    					ans++;}
    	}
	System.out.println(ans);

	      }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值