【笔试刷题】招商银行-2026.03.30-改编真题

✅ 春招备战指南 ✅

💡 学习建议:

  • 先尝试独立解题
  • 对照解析查漏补缺

🧸 题面描述背景等均已深度改编,做法和题目本质基本保持一致。

🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力

🌸 目前本专栏已经上线200+套真题改编解析,后续会持续更新的

春秋招笔试机考招合集 -> 互联网必备刷题宝典🔗

招商银行-2026.03.30

1. 术语接龙计分

问题描述

招商银行的培训平台里有一个简化版“术语接龙”小游戏。

系统维护了一份单词表,并给定一个当前单词。用户之后会依次输入若干个单词。对每次输入,只有同时满足下面两个条件,才算一次合法操作:

  1. 该单词在给定单词表中出现过。
  2. 该单词的首字母等于当前单词的末字母。

如果某次输入不合法,游戏立即结束。

如果某次输入合法,则得分加 。随后系统会从单词表中选择下一个当前单词。为了保证结果唯一,规定系统总是选择所有可接龙单词中,在单词表里最先出现的那个单词。这里“可接龙”指的是:单词的首字母等于本次用户输入单词的末字母。

如果不存在这样的下一个当前单词,游戏也会立即结束。

请你输出游戏结束时的最终得分。

输入格式

第一行输入一个整数 ,表示单词表中的单词数量。

第二行输入 个单词,表示单词表中的全部单词。

第三行输入一个单词 ,表示初始当前单词。

第四行输入一个整数 ,表示用户一共输入了多少个单词。

接下来 行,每行输入一个单词,表示用户的输入顺序。

保证所有单词都只由小写英文字母组成。

输出格式

输出一个整数,表示游戏结束时的最终得分。

样例输入 1

6
ant tiger rabbit tree elephant apple
ant
3
tiger
tiger
tiger

样例输出 1

3

数据范围

  • 每个单词长度至少为
  • 所有输入单词的总长度不超过
样例 解释说明
样例1 第一次输入 tiger 后,系统会把当前单词更新为 rabbit。由于 rabbit 的末字母是 t,后两次继续输入 tiger 依然合法,因此总得分为

题解

这题本质就是一次顺序模拟,关键在于把“下一个当前单词”预处理出来。

先看每次操作需要做什么:

  1. 判断用户输入的单词是否在单词表中出现过。
  2. 判断它的首字母是否等于当前单词的末字母。
  3. 如果合法,分数加一。
  4. 再根据这个输入单词的末字母,找到单词表中最早出现的可接龙单词,作为新的当前单词。

其中第 1 步可以用哈希集合完成,做到 判断是否存在。

第 4 步也不需要每次重新扫描整张单词表。因为系统只关心“某个首字母对应的最早出现单词”,所以我们只要从左到右扫一遍单词表,记录每个首字母第一次出现时对应的单词即可。之后如果需要找首字母为 c 的下一个当前单词,直接查表即可。

这样整道题就只需要:

  • 一次扫描单词表做预处理;
  • 一次按顺序扫描用户输入做模拟。

时间复杂度是 ,不计字符串哈希常数时已经足够。空间复杂度是

参考代码

  • Python
import sys

input = lambda: sys.stdin.readline().strip()


def solve():
    n = int(input())
    words = input().split()
    current = input()
    m = int(input())

    # 判断用户输入的单词是否在词表中出现过。
    word_set = set(words)

    # 记录每个首字母最早出现的单词。
    first_by_head = {}
    for word in words:
        head = word[0]
        if head not in first_by_head:
            first_by_head[head] = word

    score = 0
    for _ in range(m):
        word = input()
        if word not in word_set or word[0] != current[-1]:
            break

        score += 1
        nxt = first_by_head.get(word[-1])
        if nxt is None:
            break
        current = nxt

    print(score)


if __name__ == "__main__":
    solve()
  • Cpp
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    vector<string> words(n);
    unordered_set<string> word_set;
    array<string, 26> first_by_head{};
    array<bool, 26> seen{};

    for (int i = 0; i < n; i++) {
        cin >> words[i];
        word_set.insert(words[i]);
        int idx = words[i][0] - 'a';
        if (!seen[idx]) {
            seen[idx] = true;
            first_by_head[idx] = words[i];
        }
    }

    string current;
    cin >> current;
    int m;
    cin >> m;

    int score = 0;
    for (int i = 0; i < m; i++) {
        string word;
        cin >> word;

        if (!word_set.count(word) || word[0] != current.back()) {
            break;
        }

        score++;
        int idx = word.back() - 'a';
        if (!seen[idx]) {
            break;
        }
        current = first_by_head[idx];
    }

    cout << score << '\n';
    return 0;
}
  • Java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine().trim());
        String[] words = br.readLine().trim().split("\\s+");
        String current = br.readLine().trim();
        int m = Integer.parseInt(br.readLine().trim());

        Set<String> wordSet = new HashSet<>(Arrays.asList(words));
        String[] firstByHead = new String[26];
        boolean[] seen = new boolean[26];

        for (String word : words) {
            int idx = word.charAt(0) - 'a';
            if (!seen[idx]) {
                seen[idx] = true;
                firstByHead[idx] = word;
  

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

互联网刷题笔试宝典 文章被收录于专栏

互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力

全部评论

相关推荐

前情提要&nbsp;本人29届毕业,这几天也是春招火热期,于是在boss上投了几个公司。发了几份简历之后,第四范式公司hr初步问我了一些vibe&nbsp;coding的经历,之后打算联系我进行面试。面试内容问:简历中AI&nbsp;Agents的开发经历是个人开发的还是在实习?答:前两个项目是个人开发,后一个是团队开发的(项目:工作流、AI框架、Agent多端应用)问:索要项目上线的网址和在这个Agent多端应用中负责什么方向?答:这个项目的后端是一个golang、python的微服务架构,其中golang负责后端,python负责ai层。前端则是web端为vue3,移动端为flutter。我负责的是全部的的ai层和golang后端的跨域通信和部分后端功能和web前端功能的改进设计。问:询问项目的主要功能,和如何实现?答:使用langchain、langgraph框架,首先把工具通过mcp-adapters进行打包,之后ReActAgent进行调用工具与数据库进行交互,另一方面在进行增删改操作时由于ai输出不一定满足用户的需求,我做了一个独立的确认节点作为拦截中间件,截断了数据的写入,而用户可以来自行编辑或保存删除。问:Agent的工作模式都有什么?答:ToolsCallingAgent、ReActAgent、ReflectionAgent、PlanAndSolveAgent(并粗略展开每一种大概机制,此处不多赘述)问:介绍一下你对RAG的理解?答:我平时不太喜欢用RAG,主要因为两点,自己开发的时候大多数用不到这个技术,RAG最好在垂直领域来使用,尤其是ToB或者专精某一特定领域,而且前段时间不少人说RAG已死,指的是现在很多东西能替代RAG的功能;其次RAG的召回率并不算太高,想要优化召回率只能花费大量人力财力来进行经验微调。知识库开发的流程一般是,先进行数据清洗,之后进行向量化储存到向量数据库,召回时在进行一个向量匹配的操作问:&nbsp;看到你做了一个memory上下文记忆功能的处理,可以说一下处理逻辑吗?答:&nbsp;记忆可以分成长期记忆和短期记忆,我在长期记忆这里使用的是RAG技术,将用户强调或者比较有价值的数据存入,这样可以作为一个跨对话窗口的上下文,而短期记忆我也是做了一个上下文压缩,用了一个经验值作为阈值,等上下午到一定程度之后就会进行精炼,而精炼又有两种模式,我分为智能模式和机械模式,智能模式是通过llm进行关键信息等提炼,机械模式是通过正则处理去除冗余的工具调用日志和结构化导致的上下文污染问:对于模型的选型你是否有考虑呢?答:之前自己做过coding&nbsp;agent等类似的项目,在多智能体系统中对于不同的任务采用的模型不同,比如plan使用主力模型opus,编写代码使用中等模型sonnet,而探索项目结构可以使用haiku等小模型,这样的话既可以节省token花销也可以不降低代码质量问:你是否有AI编程的经历和理解?答:略(先是说了市面上各ai编程工具的差异性优点及缺点和我自己的订阅情况,之后说了开发模式相关如spec&nbsp;driven。ps:可参考该文章&nbsp;AI&nbsp;原生工程)问:对于Agent有没有什么熔断机制?你有接触过么?比如你的基模直接卡死了,你的后端是否有什么保底机制?答:有的,在项目中我对tool&nbsp;calling做了一个熔断机制如果工具调用失败超过三次就会进行熔断处理,防止反复重试导致系统崩坏。如果基模卡死的话,完全可以弄一个集群来处理,如果一个服务器掉了可以快速转到另一个提供llm的服务器。最终也算是过了
牛客92772631...:buer,夺少届?
查看9道真题和解析
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务