leetcode2844. 生成特殊数字的最少操作
官解
class Solution:
def minimumOperations(self, num: str) -> int:
n = len(num) # 记录字符串长度
find0 = find5 = False # 初始化标记变量
# 从后向前遍历字符串
for i in range(n - 1, -1, -1):
if num[i] in ['0', '5']: # 如果字符是 '0' 或 '5'
if find0: # 如果已经找到一个 '0'
return n - i - 2 # 计算删除操作次数并返回结果
if num[i] == '0':
find0 = True # 标记找到 '0'
else:
find5 = True # 标记找到 '5'
elif num[i] in ['2', '7']: # 如果字符是 '2' 或 '7'
if find5: # 如果已经找到一个 '5'
return n - i - 2 # 计算删除操作次数并返回结果
# 处理特殊情况
if find0:
return n - 1 # 需要删除除最后一个 '0' 之外的所有字符
return n # 返回字符串长度,表示无法形成目标字符串
这段代码实现了一个名为 minimumOperations
的方法,用于计算将给定字符串 num
转换成一个以 00
、25
、50
或 75
结尾的字符串所需的最少删除操作次数。
变量和数据结构
num: str
:输入的数字字符串。n: int
:字符串num
的长度。find0: bool
和find5: bool
:用于标记是否找到目标字符'0'
或'5'
。
算法步骤
-
初始化变量:
- 记录字符串
num
的长度n
。 - 初始化
find0
和find5
为False
,用于标记是否找到对应的字符。
- 记录字符串
-
从后向前遍历字符串
num
:- 从字符串
num
的末尾开始,向前遍历每个字符。 - 如果遇到字符
'0'
或'5'
:- 如果已经找到过一个
'0'
,则计算删除操作次数并返回结果。 - 如果字符是
'0'
,设置find0
为True
。 - 如果字符是
'5'
,设置find5
为True
。
- 如果已经找到过一个
- 如果遇到字符
'2'
或'7'
并且已经找到过'5'
,则计算删除操作次数并返回结果。
- 从字符串
-
处理特殊情况:
- 如果遍历结束后,找到过一个
'0'
,则需要删除除最后一个'0'
之外的所有字符。 - 如果没有找到可以形成目标字符串的字符,则返回字符串长度
n
。
- 如果遍历结束后,找到过一个
返回结果
- 返回将字符串
num
转换成以00
、25
、50
或75
结尾的字符串所需的最少删除操作次数。
代码的关键点
-
倒序遍历:
- 从字符串末尾开始遍历,可以有效地找到以
00
、25
、50
或75
结尾的字符组合。
- 从字符串末尾开始遍历,可以有效地找到以
-
标记和条件判断:
- 使用
find0
和find5
标记是否找到对应的字符,通过条件判断确定需要的删除操作次数。
- 使用
-
特定字符组合的处理:
- 通过特定字符
'0'
、'5'
、'2'
、'7'
的组合判断,确定是否可以形成目标字符串。
- 通过特定字符
总结
这段代码通过倒序遍历字符串 num
,并利用标记变量 find0
和 find5
来记录是否找到对应字符,最终确定最少的删除操作次数以将 num
转换成以 00
、25
、50
或 75
结尾的字符串。通过有效的字符组合判断和条件处理,这段代码实现了对问题的高效解决。
原文地址:https://blog.csdn.net/qq_40016005/article/details/140696096
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!