每日算法题-API 集群负载统计

题目描述

某个产品的 RESTful API 集合部署在服务器集群的多个节点上,近期对客户端访问日志进行了采集,需要统计各个 API 的访问频次,根据热点信息在服务器节点之间做负载均衡,现在需要实现热点信息统计查询功能。

RESTful API 的由多个层级构成,层级之间使用/连接,如/A/B/C/D这个地址,A 属于第一级,B 属于第二级,C 属于第三级,D 属于第四级。

现在负载均衡模块需要知道给定层级上某个名字出现的频次,未出现过用 0 次表示,实现这个功能。

输入描述

第一行为 N,表示访问历史日志的条数,0

接下来 N 行,每一行为一个 RESTful API 的 URL 地址,约束地址中仅包含英文字母和连接符/,最大层级为 10,每层级字符串最大长度为 10

最后一行为层级 L 和要查询的关键字。

输出描述

输出给定层级上,关键字出现的频次,使用完全匹配方式(大小写敏感)。

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = Integer.parseInt(scanner.nextLine());
        List urls = new ArrayList<>();
        
        for (int i = 0; i < n; i++) {
            urls.add(scanner.nextLine().trim());
        }
        
        String[] query = scanner.nextLine().split(" ");
        int level = Integer.parseInt(query[0]);
        String keyword = query[1];
        
        int count = 0;
        for (String url : urls) {
            String[] parts = url.split("/");
            List validLevels = new ArrayList<>();
            
            for (String part : parts) {
                if (!part.isEmpty()) {
                    validLevels.add(part);
                }
            }
            
            if (validLevels.size() >= level) {
                String target = validLevels.get(level - 1);
                if (target.equals(keyword)) {
                    count++;
                }
            }
        }
        
        System.out.println(count);
    }
}

代码解析

  1. 输入处理:读取日志条数n和后续的URL地址,最后读取查询条件(层级L和关键字)
  2. 层级解析:对每个URL进行分割处理,过滤空字符串后得到有效层级列表
  3. 层级匹配:检查目标层级是否存在,若存在则严格匹配关键字
  4. 统计输出:统计完全匹配的次数并输出结果

关键点

  • 使用split("/")分割URL地址,并通过过滤空字符串处理前导/连续斜杠
  • 层级索引转换:题目定义的层级从1开始,转换为Java列表的0-based索引
  • 完全匹配规则:区分大小写且要求字符串内容完全相同完全相同

你可能感兴趣的:(算法)