试题 H: 人物相关性分析 时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分
【问题描述】 小明正在分析一本小说中的人物相关性。他想知道在小说中 Alice 和 Bob 有多少次同时出现。 更准确的说,小明定义 Alice 和 Bob“同时出现”的意思是:在小说文本 中 Alice 和 Bob 之间不超过 K 个字符。 例如以下文本: ThisisastoryaboutAliceandBob.AlicewantstosendaprivatemessagetoBob. 假设 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 ThisisastoryaboutAliceandBob.AlicewantstosendaprivatemessagetoBob.
【样例输出】 2
【评测用例规模与约定】 对于所有评测用例,1≤ K ≤1000000。
嘻嘻嘻~我又来了,今天做了这个题,然后遇到问题了…在网上找了一圈发现许多分享的代码只满足题目,变换输入就不满足了…于是只能靠自己了(小白苦思冥想…),放代码了和大家分享,如有错误,欢迎指正!!!(我的代码很简单,嘻嘻嘻)
public class Test5 {
//试题H:人物相关性分析
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String n=sc.nextLine();
int k=Integer.parseInt(n);
String str=sc.nextLine();
sc.close();
char[] ch=str.toCharArray();
int a = 0,b = 0,count=0;
boolean key=false;
for(int i=0;i<ch.length;i++) {
if(ch[i]=='A'&&ch[i+1]=='l'&&ch[i+2]=='i'&&ch[i+3]=='c'
&&ch[i+4]=='e'&&!((int)ch[i+5]>=97&&(int)ch[i+5]<=122)
&&!((int)ch[i+5]>=65&&(int)ch[i+5]<=90)) {
a=i;
if(a==0) {
key=true;
}
if(b!=0||key==true) {
key=false;
int s=b+3;
if(a-s<=k) {
count++;
}
}
}
if(ch[i]=='B'&&ch[i+1]=='o'&&ch[i+2]=='b'&&!((int)ch[i+3]>=97
&&(int)ch[i+3]<=122)&&!((int)ch[i+3]>=65&&(int)ch[i+3]<=90)){
b=i;
if(b==0) {
key=true;
}
if(a!=0||key==true){
key=false;
int s=a+5;
if(b-s<=k) {
count++;
}
}
}
}
System.out.println(count);
}
}
我的测试来咯!