Help the bookseller

小编 2026-06-22 阅读:1340 评论:0
Help the bookseller  题目:帮助书店 题目描述 A bookseller has lots of books classified in 26 categories labeled...

Help the bookseller 

题目:帮助书店

题目描述

A bookseller has lots of books classified in 26 categories labeled A, B, ... Z. Each book has a code c of 3, 4, 5 or more capitals letters. The 1st letter of a code is the capital letter of the book category. In the bookseller\'s stocklist each code c is followed by a space and by a positive integer n (int n >= 0) which indicates the quantity of books of this code in stock.

题目的例子

L = {\"ABART 20\", \"CDXEF 50\", \"BKWRK 25\", \"BTSQZ 89\", \"DRTYM 60\"}or
L = [\"ABART 20\", \"CDXEF 50\", \"BKWRK 25\", \"BTSQZ 89\", \"DRTYM 60\"] 

M = {\"A\", \"B\", \"C\", \"W\"}or
M = [\"A\", \"B\", \"C\", \"W\"] 

return  (A : 20) - (B : 114) - (C : 50) - (W : 0)

题目大意:大概是说书店的书籍分类为26个字母A~Z开头,L里面每一个元素的第一个大写字母是书籍的分类,后面的数字是该类书籍的数量,如\"ABART 20\",A类书籍是20本,M说明的是要计算这类书的数量,如M中的B类数对应例子中的\"BKWRK 25\", \"BTSQZ 89\",共有114本,输出格式为(x : 数量) - (x : 数量)....

实现思路

 利用map数据结构来存储结果,StringBuffer进行后面的字符串拼接,对lstOfArt字符串数组即例子中的L进行遍历,截取每个字符的开头,即书籍的分类,截取空格后的数字,代表该类书籍的数量,判断map当中时候包含该书籍分类的键值了,存在就进行该类书籍数目的累加,最后在更新map里面的数据,不存在就直接添加。然后对lstOf1stLetter即例子中的M进行遍历,与map里面的键进行匹配,匹配到就直接添加到StringBuffer里面,格式\"(\"+s+\" : \"+map.get(s)+\") - \",匹配不到的格式为\"(\"+s+\" : \"+0+\") - \",并添加到StringBuffer,最后对StringBuffer转换成字符串并且要进行截取,因为后面有多余的字符串“空格-空格”。

实现代码

import java.util.*;
public class StockList { 
  
  // 1st parameter is the stocklist (L in example), 
  // 2nd parameter is list of categories (M in example)
  public static String stockSummary(String[] lstOfArt, String[] lstOf1stLetter) {
    if(lstOfArt.length==0||lstOf1stLetter.length==0)return \"\";
    Map<String,Integer> map=new HashMap<String,Integer>();
    StringBuffer sb=new StringBuffer();
    for(String str:lstOfArt){
      String c=str.substring(0,1).toString();
      int num=Integer.parseInt(str.substring(str.indexOf(\" \")+1,str.length()));
      if(map.containsKey(c)){
        num+=map.get(c);
      }
      map.put(c,num);
    }
    for(String s:lstOf1stLetter){
      if(map.get(s)==null){
        sb.append(\"(\"+s+\" : \"+0+\") - \");
      }
      else sb.append(\"(\"+s+\" : \"+map.get(s)+\") - \");
    }
    return sb.toString().substring(0,sb.length()-3);
  }
}

优秀coder的code

import java.util.stream.Stream;
import java.util.stream.Collectors;
public class StockList { 
  public static String stockSummary(String[] arts, String[] cats) {
    if (arts.length == 0) return \"\";
    final int space = arts[0].indexOf(\" \");
    return Stream.of(cats)
      .map(c -> c + \" : \" + Stream.of(arts)
        .filter(a -> c.contentEquals(a.subSequence(0, 1)))
        .map(a -> a.substring(space + 1))
        .mapToInt(Integer::parseInt)
        .sum())
      .map(s -> \"(\" + s + \")\")
      .collect(Collectors.joining(\" - \"));
  }
}

import java.util.Map;
import static java.util.Arrays.stream;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.summingInt;
import static java.util.stream.Collectors.joining;

public class StockList {
  private static int stockCount(final String s) {
    return Integer.valueOf(s.split(\" \")[1]);
  }
  
  public static String stockSummary(final String[] stock, final String[] categories) {
    if (stock.length == 0 || categories.length ==  0)
      return \"\";
    final Map<String, Integer> counts = stream(stock)
        .collect(groupingBy(s -> s.substring(0, 1), summingInt(StockList::stockCount)));
    return stream(categories)
        .map(s -> \"(\" + s + \" : \" + counts.getOrDefault(s, 0) + \")\")
        .collect(joining(\" - \"));
  }
}

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表