【备战秋招】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%内容,订阅专栏后可继续查看/也可单篇购买

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

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

全部评论

相关推荐

评论
1
1
分享

创作者周榜

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