试题 H: 人物相关性分析
时间限制: 1.0s 内存限制: 512.0MB 本题总分: 20 分
【问题描述】
小明正在分析一本小说中的人物相关性。他想知道在小说中 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 个字符。
注意:
1. Alice 和 Bob 是大小写敏感的, alice 或 bob 等并不计算在内。
2. 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
【评测用例规模与约定】
对于所有评测用例, 1 ≤ K ≤ 1000000。
借鉴:https://blog.csdn.net/malimingwq/article/details/88953526
在Java的String类中有个用于分割字符串的方法split(String regex):String[],将此方法用于以空格和.分割输入的字符串,然后枚举返回的String[],找到配对的Alice和Bob,还可以方便的统计每对组合间间隔的字符串长度。
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner reader=new Scanner(System.in); int res=0; //save result int K=reader.nextInt(); reader.nextLine(); //nextLine吸取回车键 String str=reader.nextLine(); String words[]=str.split("\\s+|\\."); //以空格和.分割出来,注意.空格的组合存放为空字符串 // Alice------>Bob for(int i=0;i<words.length;i++){ if(words[i].equals("Alice")){ for(int j=i+1;j<words.length;j++){ if(words[j].equals("Bob")){ int sum=1; //这里要等于1 for(int k=i+1;k<j;k++){ sum+=words[k].length()+1; } if(sum<=K){ res++; } } } } } //Bob--------->Alice for(int i=0;i<words.length;i++){ if(words[i].equals("Bob")){ for(int j=i+1;j<words.length;j++){ if(words[j].equals("Alice")){ int sum=1; //这里要等于1 for(int k=i+1;k<j;k++){ sum+=words[k].length()+1; } if(sum<=K){ res++; } } } } } System.out.println(res); } }
转载于:https://www.cnblogs.com/chiweiming/p/10674087.html
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100995.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...