阿里17春招实习生笔试编程题:实现一个过滤功能,来匹配订阅关系是否符合

下面是原题目以及解答

阿里的消息中间件,负责淘宝天猫支付宝等各个系统的消息中转,削峰填谷及架构的解耦。在每年的双11中承载了数万亿的消息。消息中间件中有Pub/Sub两个角色,Pub方发送消息到消息中间件,消息中间件再根据订阅关系投递给订阅方。例如用户成功购买了一个物品,交易平台(Pub)会发送一条交易完成(trade-done)的消息,购物车平台(Sub)订阅到这个消息后,会将用户的购物车物品删除掉。这里涉及一个问题,交易平台会发送各种类型的消息,消息中间件是如何准确的将相应的消息投递给购物车平台的?所使用的就是消息中间件的过滤功能,过滤的方式有很多种,表达式判断,正则匹配等。假设让你来实现一个过滤功能,来匹配订阅关系是否符合,给定如下条件:
‘?’ 匹配一个字符
‘*’ 匹配任意连串的字符
如上面的例子中,购物车平台订阅方式是pattern=*trade-done,那么
filter(100-trade-done, pattern) = 1,
filter(200-trade-done, pattern) = 1,
filter(200-paid-done, pattern) = 0

如果pattern=200-?*-done :
filter(100-trade-done, pattern) = 0,
filter(200-trade-done, pattern) = 1,
filter(200-paid-done, pattern) = 1

如果pattern=1*trade*done :
filter(100-trade-done, pattern) = 1,
filter(200-trade-done, pattern) = 0,
filter(200-paid-done, pattern) = 0

编译器版本: Java 1.8.0_66
请使用标准输入输出(System.in, System.out);已禁用图形、文件、网络、系统相关的操作,如java.lang.Process , javax.swing.JFrame , Runtime.getRuntime;不要自定义包名称,否则会报错,即不要添加package answer之类的语句;您可以写很多个类,但是必须有一个类名为Main,并且为public属性,并且Main为唯一的public class,Main类的里面必须包含一个名字为’main’的静态方法(函数),这个方法是程序的入口
时间限制: 1S (C/C++以外的语言为: 3 S) 内存限制: 64M (C/C++以外的语言为: 576 M)
输入:
第一行,需要过滤的字符串 第二行,匹配模式
输出:
匹配结果,匹配成功返回1,匹配失败返回0
输入范例:
100-trade-done 1*trade*done
输出范例:
1


代码如下(经过检验且编译通过,如有问题欢迎指正):

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        //System.out.println("please input the String value:");
        String value = sc.nextLine();   
        //System.out.println("please input the filter pattern:");
        String pattern = sc.nextLine();
        System.out.println(filter(value,pattern));
    }
    public static int filter(String value,String pattern){
        String newPattern = pattern.replace("?", "\\w").replace("*", ".*");
        return value.matches(newPattern)?1:0;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值