【华为机试真题 Python实现】字符串匹配

本文介绍了华为机试中的一道真题,涉及使用Python实现字符串匹配。题目要求找出给定字符串中符合正则表达式子串的第一个位置。尽管提供的解法非最优,但强调了在机试中考虑代码的通过率而非仅关注运行时间。文章包含输入输出说明、示例及参考代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

《华为机试真题》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。

如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议!

本文解法非最优解(即非性能最优)。

题目描述

给出一个字符串,给出一个正则白表达式子串,找出可以找到子串的第一个位置。
例如:字符串 asdfas,子串是 d[sf],([]表示里边任意一个元素),输出为 3,因为 ds 或 df 去匹配字符串,找到 df 输出位置为 3。

特别提醒!!!!
注意1:机试为ACM 模式
你的代码需要处理输入输出,input接收输入、print格式化输出

注意2:机试按通过率记分
复杂题目可以考虑暴力破解,再逐步优化,不是运行超时就无法得分,如下,提交结果运行超时,但用例通过率>

### 2024 华为 OD 真实题目及 Python 解题方法 #### 题目概述 华为OD涵盖了多种类型的编程挑战,涉及数据结构、算法设计以及实际应用开发等多个方面。特别是针对Python语言的考察,不仅限于基础语法的理解,更注重考生能否灵活运用所学知识解决复杂问题[^1]。 #### 控制流与函数的应用 在解答这些题目时,掌握好`if`条件判断语句、`for`循环遍历列表或其他可迭代对象、`while`循环实现重复操作是非常重要的技能之一。通过合理构建逻辑分支和循环制来简化代码逻辑并提高效率[^3]。 ```python def example_function(data_list): result = [] for item in data_list: if isinstance(item, int): # 判断是否为整数类型 while item > 0: # 当前元素大于零则执行内部循环 result.append(item % 10) item //= 10 return sorted(result)[::-1] # 返回逆序排列的结果数组 ``` #### 字符串处理技巧 对于涉及到字符串的操作类题目,在Python中有许多内置的方法可以直接调用来完成特定功能,比如查找子串位置(`find()`)、替换指定字符(`replace()`)或是分割整个字符串成多个部分(`split()`)等。此外还可以利用正则表达式的强大模式匹配能力来进行更加复杂的文本解析工作。 ```python import re text = "hello world" pattern = r"\bwor\w+" # 定义要匹配的目标单词模式 matches = re.findall(pattern, text)# 查找所有符合条件的内容 print(matches) # 输出找到的所有项 ['world'] ``` #### 文件读写支持 当遇到需要处理外部输入输出场景下的练习题时,则可以借助open()函数打开文件,并结合read()/write()方法轻松达成目的;同时为了确保资源能够被及时释放掉,建议采用with-as上下文管理器的方式来进行封装。 ```python file_path = "./example.txt" # 写入新内容到文件中去 with open(file_path, mode='w') as f_write: f_write.write("This is a test.") # 从现有文件里读取全部信息出来显示给用户看 with open(file_path, 'r') as f_read: content = f_read.read() print(content) ``` #### 实战案例分析——学生重新排队 以“学生重新排队”这道典型贪心算法为例,该问题要求按照一定规则调整队列顺序使得最终状态满足某种最优性质。具体来说就是让身高较高的同学站在后面而较矮的同学位于前面的位置上形成有序序列。下面给出了一种基于比较交换法的思想实现方案[^2]: ```python from typing import List def sort_students(heights: List[int]) -> None: n = len(heights) for i in range(n - 1): swapped = False for j in range(0, n-i-1): if heights[j] > heights[j + 1]: heights[j], heights[j + 1] = heights[j + 1], heights[j] swapped = True if not swapped: break students_heights = [170, 165, 180, 175, 160] sort_students(students_heights) print(f'Sorted students by height: {students_heights}') ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不太灵光的程序员

有用的话可以请博主喝杯咖啡续命

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值