题目
小明 正在分析一本小说中的人物相关性。他想知道小说中Alice和Bob有多少次同时出现
更准确的说,小明定义Alice和Bob同时出现的意思是,在小说文本你中Alice和Bob之间不超过K个字符
注意
- Alice和Bob是大小写敏感的,alice和bob等不计算在内
- Alice和Bob应为单独的单词,前后可以有标点符号和空格,但是不能有字母。例如Bobbi不算出现了Bob
输入格式:
第一行包含一个整数K
第二行包含一行字符串,只包含大小写字母、标点符号和空格。长度不超过1000000
答案
/**
* 人物相关性分析
* 测试用例:
* 20
* This is a story about Alice and Bob.Alice wants to send a private message to Bob
* 答案为2
*/
public class T10_H {
public static void main(String[] args) {
/**
* 思路:
* 将字符串获取后分割成单词存入字符串数组,再遍历该数组判断是否出现Alice或Bob,如果出现,则向后遍历K个字符,判断是否出现另一个
*/
//接收参数
Scanner sc = new Scanner(System.in);
int K = sc.nextInt();
String[] pre = new String[]{"Alice", "Bob"};//将Alice和Bob单独存在数组中备用
String s1 = sc.nextLine();//吸收换行符
String str = sc.nextLine();//获取输入的文本
sc.close();
String[] s = str.split("[ ,.]");//按空格,和.把字符串分割成单词
int count = 0;//存储答案
//遍历字符串数组判断是否是Alice或Bob
l:for (int i = 0; i < s.length-1; i++) {
if (s[i].equals(pre[0])) {//如果出现Alice
//从出现的位置开始往后遍历K个字符
int c = 0;//存储当前向后遍历了多少个字符
for (int j = i+1; c < K; j++) {
if (s[j].equals(pre[1])) {//如果出现Bob,则条件符合,答案加一
count++;
continue l;
}
c+=s[j].length();
c++;//原字符串中必有分隔符
}
}else if (s[i].equals(pre[1])){//与上面一致,先判断是否出现Bob,再判断Alice
//从出现的位置开始往后遍历K个字符
int c = 0;
for (int j = i+1; c < K; j++) {
if (s[j].equals(pre[0])) {
count++;
continue l;
}
c+=s[j].length();
c++;//原字符串中必有分隔符
}
}
}
System.out.println(count);
}
}