1903. 字符串中的最大奇数 - 力扣(LeetCode)


我们只需要从右向左遍历字符串 num,利用奇数的性质:
优化思路:
-
从右向左遍历:我们不需要生成所有的子字符串,只需要遍历字符串的每个字符,并检查每个结尾是奇数的子字符串即可。
-
判断奇数:对于每个字符
num[i],如果它是奇数,那么从num[i]开始到字符串结尾的所有子字符串都可以是奇数,且这些子字符串的值逐渐变大,因此我们只需要找到第一个奇数结尾的子字符串即可。 -
截取最长的奇数子字符串:我们可以从右边开始,如果当前数字是奇数,我们可以直接返回该位置的子字符串。
优化后的步骤:
-
从字符串的最后一个字符开始,检查该字符是否是奇数。
-
一旦找到一个奇数字符,返回该字符到字符串末尾的子字符串。
-
如果没有找到任何奇数字符,则返回空字符串。
优化后的代码实现:
def largestOddNumber(num: str) -> str:
# 从右到左遍历字符串
for i in range(len(num) - 1, -1, -1):
# 如果当前字符是奇数
if int(num[i]) % 2 == 1:
# 返回当前字符到字符串末尾的子字符串
return num[:i+1]
# 如果没有找到奇数子字符串
return ""
解释:
-
我们从字符串的最后一个字符开始遍历,如果该字符是奇数,则返回从该字符到字符串末尾的子字符串。
-
如果遍历完所有字符都没有找到奇数,则返回空字符串。
示例:
# 示例1
print(largestOddNumber("12345")) # 输出: "12345"
# 示例2
print(largestOddNumber("2468")) # 输出: ""
# 示例3
print(largestOddNumber("135")) # 输出: "135"
时间复杂度:
-
由于我们只遍历一次字符串,时间复杂度为 O(n)O(n),其中 nn 是字符串
num的长度。这比原始的O(n^2) 方法要高效得多。
这样优化后,时间复杂度得到了显著的提升,能够更好地处理较大的输入。
370

被折叠的 条评论
为什么被折叠?



