蓝桥杯之人物相关性分析(正则表达式!!!)

题目不难,关键在于空格和字符 . 需要对其进行转义(一道让我疑惑半天的题目)!可能是对正则表达式这方面之前接触的比较少把,做题的时候没有这个意识。以后要增强此方面的意识和能力。加油!
【问题描述】
小明正在分析一本小说中的人物相关性。他想知道在小说中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

public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int k = sc.nextInt();
		sc.nextLine();
		String sb = sc.nextLine();
		sc.close();
		String[] str=sb.split("\\s+|\\.");
		int flag=0,pre=-1,ans=0;
		for(int i=0;i<str.length;i++) {
			if(str[i].equals("Alice")||str[i].equals("Bob")) {
				if(flag==0) {
					flag=str[i].equals("Alice")?1:2;
					pre=i;
				}else if((flag==1&&str[i].equals("Alice"))||(flag==2&&str[i].equals("Bob"))) {
					pre=i;
				}else {
					if(i-pre-1<=k) {
						int count=0;
						for(int j=pre+1;j<i;j++) {
							count+=str[j].length()!=0?str[j].length():1;
						}
						count+=i-pre;
						if(count<=k)ans++;
						pre=i;
						flag=str[i].equals("Alice")?1:2;
					}
				}
			}
		}
		System.out.println(ans);
	}
}
上一篇:基于区块链的防护物资捐赠监管系统


下一篇:CoolPlist 帧动画自动生成工具