字节青训营 超市里的货物架调整

超市里的货物架调整

问题描述

在一个超市里,有一个包含 nn 个格子的货物架,每个格子中放有一种商品,商品用小写字母 a 到 z 表示。当顾客进入超市时,他们会依次从第一个格子查找到第 nn 个格子,寻找自己想要购买的商品。如果在某个格子中找到该商品,顾客就会购买它并离开;如果中途遇到一个空格子,或查找完所有格子还没有找到想要的商品,顾客也会离开。

作为超市管理员,你可以在顾客到来之前重新调整商品的顺序,以便尽可能多地出售商品。当第一个顾客进入后,商品位置不能再调整。你需要计算在最优调整下,最多可以卖出多少件商品。输入变量说明:

  • n:货物架的格子数
  • m:顾客想要购买的商品种类数
  • s:货物架上商品的初始顺序
  • c:顾客想要购买的商品种类

测试样例

样例1:

输入:n = 3 ,m = 4 ,s = "abc" ,c = "abcd"
输出:3

样例2:

输入:n = 4 ,m = 2 ,s = "abbc" ,c = "bb"
输出:2

样例3:

输入:n = 5 ,m = 4 ,s = "bcdea" ,c = "abcd"
输出:4

解析:题目乍一看很唬人,实际上是求两个字符串中最大子串的长度。思路也很简单,将两个字符串拆分为两个map,对于每个字符,统计出现的数量,最后返回两个map中同一个key的较小值就行。字节青训营的oj数据量一直较小,不知道放在别的oj里面能不能过(

代码如下

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static int solution(int n, int m, String s, String c) {
        int count=0;
        //用两个hashmap去储存它,返回同一个值中较小的值
        char[] ch1 = s.toCharArray();
        char[] ch2 = c.toCharArray();
        HashMap<Character,Integer> map1=new HashMap<>();
        HashMap<Character,Integer> map2=new HashMap<>();
      for (char ch : ch1) {
        map1.put(ch, map1.getOrDefault(ch, 0)+1);
      }
    for (char ch : ch2) {
        map2.put(ch, map2.getOrDefault(ch, 0)+1);
    }
    for(char i='a';i<='z';i++){
        if(map1.keySet().contains(i)&&map2.keySet().contains(i)){
            count+=Math.min(map1.get(i), map2.get(i));
        }
    }
        return count;
    }

    public static void main(String[] args) {
        System.out.println(solution(3, 4, "abc", "abcd") == 3);
        System.out.println(solution(4, 2, "abbc", "bb") == 2);
        System.out.println(solution(5, 4, "bcdea", "abcd") == 4);
    }
}

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值