【备战秋招】25届大疆秋招笔试真题第二套

✅ 秋招备战指南 ✅

💡 学习建议:

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

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

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

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

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

题目一:文件名版本解析

1️⃣:使用正则表达式匹配文件名格式

2️⃣:提取基础文件名、版本号和扩展名三个部分

3️⃣:处理特殊情况,如没有版本号的文件名

难度:简单

这道题目的关键在于理解文件名的结构模式,使用正则表达式来精确匹配和提取各个组成部分。通过模式匹配,可以有效地处理带版本号和不带版本号的两种文件名格式,实现 O(n×m) 的时间复杂度。

01. 文件名版本解析

问题描述

编写一个函数,接收一个包含多个文件名的字符串作为输入,返回一个元组的列表。列表中的每个元组包含文件名、扩展名以及文件名中的版本号。

文件名的版本号格式为 _v,例如 file_v2.txt。如果文件名中没有版本号,则版本号返回数字

输入格式

第一行包含一个字符串,格式为用逗号和空格分隔的多个文件名,例如 'file_v1.txt', 'file_v2.txt'

输出格式

输出一个元组的列表,每个元组包含三个元素:文件名(不含版本号和扩展名)、扩展名、版本号(整数)。

样例输入

'file_v1.txt', 'file_v2.txt'
'document.pdf', 'image_v3.png', 'text.txt'

样例输出

[('file', 'txt', 1), ('file', 'txt', 2)]
[('document', 'pdf', 0), ('image', 'png', 3), ('text', 'txt', 0)]

数据范围

  • 文件名长度不超过 个字符
  • 文件名数量不超过
  • 版本号范围为
  • 扩展名长度不超过 个字符
样例 解释说明
样例1 两个文件都有版本号,分别是 v1 和 v2,扩展名都是 txt
样例2 document.pdf 没有版本号返回 0,image_v3.png 有版本号 3,text.txt 没有版本号返回 0

题解

这道题的核心是解析文件名的结构,提取出基础文件名、版本号和扩展名三个部分。

首先分析文件名的格式:

  • 基本格式:文件名.扩展名
  • 带版本号格式:文件名_v数字.扩展名

解题思路很直接:使用正则表达式来匹配这种模式。正则表达式 ^(.*?)(?:_v(\d+))?\.(\w+)$ 可以完美解决这个问题:

  • ^(.*?) 匹配文件名的主体部分(非贪婪匹配)
  • (?:_v(\d+))? 可选地匹配版本号部分,\d+ 捕获数字
  • \.(\w+)$ 匹配扩展名部分

处理步骤:

  1. 解析输入字符串,提取出所有文件名
  2. 对每个文件名应用正则表达式
  3. 如果匹配成功,提取三个组:基础文件名、版本号、扩展名
  4. 如果版本号不存在,设置为 0
  5. 返回结果列表

特殊情况处理:

  • 文件名以 _v 结尾但没有数字:需要将 _v 从基础文件名中移除
  • 文件名完全不匹配正则:返回原文件名和空扩展名

时间复杂度为 ,其中 是文件名数量, 是单个文件名的平均长度。对于给定的数据范围,这个复杂度完全可以接受。

参考代码

  • Python
import sys
import re

def parse_files(file_str):
    # 解析输入字符串,提取文件名列表
    files = eval(file_str)
    res = []
    # 正则表达式匹配文件名格式
    pat = re.compile(r"^(.*?)(?:_v(\d+))?\.(\w+)$")
    
    for f in files:
        m = pat.match(f)
        if m:
            base = m.group(1)  # 基础文件名
            ver = int(m.group(2)) if m.group(2) else 0  # 版本号
            ext = m.group(3)   # 扩展名
            # 处理特殊情况:文件名以_v结尾但无版本号
            if base.endswith('_v') and ver == 0:
                base = base[:-2]
            res.append((base, ext, ver))
        else:
            # 不匹配的情况
            res.append((f, '', 0))
    
    return res

# 读取输入并处理
input_str = input().strip()
result = parse_files(input_str)
print(result)
  • Cpp
#include 
#include 
#include 
#include 
#include 
using namespace std;

// 解析单个文件名的函数
tuple parse_file(const string& fname) {
    // 正则表达式匹配文件名格式
    regex pat(R"(^(.*?)(?:_v(\d+))?\.(\w+)$)");
    smatch m;
    
    if (regex_match(fname, m, pat)) {
        string base = m[1].str(); 

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

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

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

全部评论

相关推荐

02-18 13:28
门头沟学院 Java
点赞 评论 收藏
分享
03-27 16:40
已编辑
门头沟学院 C++
26学院本太难了,很多公司机筛就给我刷了。机会都难拿到如果是简历存在问题也欢迎拷打————————————————————分割线——————————————————————2026.3.4更新:发完贴之后,时不时投递又收到了不少的笔试/面试邀请。主要是之前投递简历出去之后基本上都是沉默状态,年后好转了不少timeline:2026.01.21 文远知行笔试,半年多没刷算法题 ->挂 (后续HR说春招可以重新安排笔试)2026.2.4     小鹏汇天 技术一面,第二周收到结果 ->挂2026.2.12   大众Cariad代招 技术二面 ->Offer2026.2.28   多益网络技术面试,由于风评太差,一直在犹豫要不要接面试 ->推迟-----------分割线-----------2026.3 月前的某一天,临时去电网报名了二批计算机岗位的笔试2026.3.6 从上家公司实习离职,氛围最好的一家公司,leader 说可以帮忙转正,但是流程太长,而且我们部门据说只有一个 hc,更想要研究生,我很有可能是会被签外包公司在这里干活,就离职了。2026.3.9 入职新公司,大众Cariad 以外部公司的身份进组,项目组签了三年,后续三年应该都可以在这里呆,不知道有没有希望原地跳槽。2026.3.10 电网考试居然说我通过资格审查了,短信约我去参加资格审查,请假一天,买了 12 号晚上的机票回成都2026.3.15 参加国家电网计算机类笔试2026.3.17 电网出成绩了,感觉很低。觉得已经🈚️了2026.3.18 收到电网面试通知,通知 3.22-3.25 这个时间去面试,我的岗位只招 1 个人。据说面试只有 2-3 人,不知道能不能成功----------分割线-----------2026.3.21 电网面试结束,感觉回答的还勉勉强强,大概是2个岗位分别招1个人,一共11人面试,实际来了9人2026.3.27 出面试成绩,满分100分,早上10:20左右发现面试成绩46,我震惊了,没截图,后面过了十分钟重新看发现面试成绩给我改成58了。但同样震惊。朋友问我是不是把面试官打了,哈哈
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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