第十届蓝桥杯javaC组人物相关性分析

题目

小明 正在分析一本小说中的人物相关性。他想知道小说中Alice和Bob有多少次同时出现

更准确的说,小明定义Alice和Bob同时出现的意思是,在小说文本你中Alice和Bob之间不超过K个字符

注意

  1. Alice和Bob是大小写敏感的,alice和bob等不计算在内
  2. 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);


    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值