华为OD机试 - 连续子串(Python) | 机试题算法思路 【2023】

本文介绍了华为OD机试中关于寻找两个字符串相同连续子串的问题,强调理解算法思路而非背诵代码。文章提供了一个具体的例子,解释了如何判断一个字符串是否为另一个字符串的子串,并给出了使用Python实现的解决方案。

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

最近更新的博客

华为OD机试 - 自动曝光(Python) | 机试题算法思路 【2023】
华为OD机试 - 双十一(Python) | 机试题算法思路 【2023】
华为OD机试 - 删除最少字符(Python) | 机试题算法思路 【2023-02】
华为OD机试 - Excel 单元格数值统计(Python) | 机试题算法思路 【2023】
华为OD机试 -旋转骰子(Python) | 机试题算法思路 【2023】

使用说明

参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。

华为 OD 清单查看地址:blog.youkuaiyun.com/hihell/category_12199275.html

华为OD详细说明:https://dream.blog.youkuaiyun.com/article/details/128980730

连续子串

题目

给你两个字符串tp
要求从t中找到一个和p相同的连续子串
并输出该子串第一个字符的下标

输入

输入文件包括两行 分别表示字符串 t 和 p
保证t的长度不小于p
t的长度不超过1000000
p的长度不超过10000

输出

如果能从t中找到一个和p相等的连

### 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、付费专栏及课程。

余额充值