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);
}
}