第十届蓝桥杯省赛JavaB组H_人物相关性分析

该博客文章介绍了一个Java程序,用于解决蓝桥杯比赛中的一道题目。程序通过查找字符串中"Alice"和"Bob"两个单词之间的相对位置来计算得分。它使用了两个ArrayList来存储两个单词的位置,并进行双重循环比较,判断它们是否在允许的范围内相邻。程序还包含辅助方法以确保字符不是单词的一部分。
摘要由CSDN通过智能技术生成

题目:
在这里插入图片描述
在这里插入图片描述
这个题在蓝桥杯官网案例错误,所以没法判断代码得分。

思路:用两个list数组分别记录这两个字符串出现的位置,最后进行循环比较。要注意的是:判断字符出现是否是符号条件的位置(不能是一个单词的一部分)。
代码:

import java.util.ArrayList;
import java.util.Scanner;

public class H_人物相关性分析 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine();
        String str = sc.nextLine();
        long res = 0;//结果

        ArrayList<Integer> alice = po("Alice", str);//位置集
        ArrayList<Integer> bob = po("Bob", str);//位置集

        //System.out.println(alice);
        //System.out.println(bob);

        //判断alice字符的前面和后面位置
        for (int i = 0; i < alice.size(); i++) {
            for (int j = 0; j < bob.size(); j++) {
                if (alice.get(i) - bob.get(j) <= n + 3 && alice.get(i) - bob.get(j) >= -n - 5) {
                    res++;
                }
            }
        }

        System.out.println(res);

    }


    //得到字符出现位置的集合
    //s:目标字符串
    //str:总字符串
    public static ArrayList<Integer> po(String s, String str) {
        ArrayList<Integer> list = new ArrayList<>();
        int a = str.indexOf(s);//第一个出现位置
        while (a != -1) {//当找不到目标字符串 indexof方法会返回-1
            char z = str.charAt(a - 1);//前一个
            char x = ' ';
            if (a + s.length() < str.length()) {
                x = str.charAt(a + s.length());//后一个
            }
            if (!xo(z) && !xo(x)) {
                list.add(a);
            }
            a = str.indexOf(s, a + 1);
        }
        return list;
    }
    
    //判断一个字符是否是字母
    public static boolean xo(char a) {
        if (a >= 97 && a <= 122) {
            return true;
        }
        if (a >= 65 && a <= 90) {
            return true;
        }
        return false;
    }
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值