vMmSwn.md.jpg

笔试公司

时间 公司 平台
2022年8月4日 12:00 - 2022年8月5日 12:00 海康威视 赛码
2022年8月5日 14:30 - 16:30 中国建设银行 牛客
2022年8月5日 19:00 - 20:40 趋势科技 牛客
2022年8月6日 10:00 - 12:00 美团 赛码
2022年8月6日 19:00 - 21:00 科大讯飞 牛客

考试内容

主要分类单选, 多选, 填空, 编程
单选, 多选主要考察计算机基础知识, 数据库, 操作系统, 数据结构, 算法等领域知识. 涉及主要语言为C语言, 多数以C语言代码的形式展示.
美团笔试为五道编程题, 不涉及单选多选
编程题为笔试重点, 占分比重大, 且必考
海康威视, 建行, 趋势科技, 科大讯飞编程题数量为1-3道, 美团为5道

编程题

  1. 如果一个字符串从前往后读, 从后往前读内容相同, 我们称他为回文串
    如: ABBA
    现输入一个字符串, 如果可以通过交换两个字符的位置使它构成回文串, 则输出Yes, 反之输出No.

输入: AABB
输出: Yes

  1. 银行业务中我们经常需要判断文字修改的相似度, 现有如下定义: 我们把对单个字符的增删改定义为一次修改, 两段文字的相似度定义为: 1-(修改数/最大文本长度). 输出文本相似度(保留两位小数).

输入: hello
输入: elp
输出: 0.40

  1. [趋势科技]邮件占位符, 我们在企业邮件中经常使用邮件模板, 如"%TIME%, %NAME%GOTO%ADDRESS%", 我们将模板按下面规则替换:
    TIME: 2022NIAN
    NAME: SOLITUDE
    ADDRESS: CHINA
    替换后的结果为"2022NIAN, SOLITUDEGOTOCHINA"
    对于"%NAME%ADDRESS%“只替换第一个”%NAME%"
    请你完成这个程序.

输入: %TIME%, %NAME%GOTO%ADDRESS%
输入: “TIME” “NAME” “ADDRESS”
输入: “2022NIAN” “SOLITUDE” “CHINA”
输出: 2022NIAN, SOLITUDEGOTOCHINA

参考:
牛客题解1
牛客题解2

  1. [美团]小美有两种礼物, 每个礼盒可以装三个礼物, 要求每个盒子必须有至少一个A礼物一个B礼物, 输出小美可以装多少包礼物

输入: 9 49
输出: 9
输入: 44 85
输出: 43

  1. [美团]输入一个数组, 只含有若干-1 0 1, 数组的前k项必须小于0, k项之后必须大于等于0, 输出最少有多少个项违规

输入: -1 1 0 1 -1 1
输出: 2

  1. [美团]小美有x个魔法石 魔法石正反两面 标有数字 只有当超过一半的魔法石正面数字相同的时候 才能使魔法最大化 小美可以每次反转一个魔法石 判断小美至少翻转多少魔法石可以使法阵最大?

输入: 5
输入: 8 5 3 5 5
输入: 2 9 5 4 3
输出: 0

  1. [美团]有字符串处理机制s=s+r(s)+“wow”, 现输入"meituan", 求第i位字符?
    第一次处理结果: “meituannautiemwow”
    第二次处理结果: “meituannautiemwowwowmeituannautiemwow”
    第三次处理结果: “meituannautiemwowwowmeituannautiemwowwowmeituannautiemwowwowmeituannautiemwow”

输入: 16
输出: o

参考:
牛客题解1
牛客题解2

  1. [科大讯飞]输入一个字符串, 找到其中含有"e"的单词数量.

输入: I meet your come
输出: 2

  1. [科大讯飞]计算四边形面积
  2. [科大讯飞]输入字符串, 求符合"iflytek"的子序列数?(lc115)

输入: iffeclytek
输出: 2

public static void main(String[] args) {
    String str = "iflytekiflytek";
    int res = findIflytek(str);
    System.out.print(res);
}
public static int findIflytek (String str) {
    // write code here
    String s = "iflytek";
    int n = str.length();
    int m = s.length();
    int[][] dp = new int[m + 1][n + 1];
    for (int i = 0; i <= n; i++) dp[0][i] = 1;
    for(int i = 1; i <= m; i++){
        for(int j = 1; j <= n; j++){
            if(s.charAt(i - 1) == str.charAt(j - 1)){
                dp[i][j] = dp[i - 1][j - 1] + dp[i][j - 1];
            }else{
                dp[i][j] = dp[i][j - 1];
            }
        }
    }
    return dp[m][n];
}