LeetCode 题解工作台

字符串中的最大奇数

给你一个字符串 num ,表示一个大整数。请你在字符串 num 的所有 非空子字符串 中找出 值最大的奇数 ,并以字符串形式返回。如果不存在奇数,则返回一个空字符串 "" 。 子字符串 是字符串中的一个连续的字符序列。 示例 1: 输入: num = "52" 输出: "5" 解释: 非空子字符串仅…

category

3

题型

code_blocks

6

代码语言

hub

3

相关题

当前训练重点

简单 · 贪心·invariant

bolt

答案摘要

我们可以从后往前遍历字符串,找到第一个奇数,然后返回从开头到该奇数的子字符串即可。如果不存在奇数,则返回空字符串。 时间复杂度 ,其中 是字符串 的长度。忽略答案字符串的空间消耗,空间复杂度 。

Interview AiBox logo

Interview AiBox 实时 AI 助手,陪你讲清 贪心·invariant 题型思路

试试 AiBox 面试助手arrow_forward
description

题目描述

给你一个字符串 num ,表示一个大整数。请你在字符串 num 的所有 非空子字符串 中找出 值最大的奇数 ,并以字符串形式返回。如果不存在奇数,则返回一个空字符串 ""

子字符串 是字符串中的一个连续的字符序列。

 

示例 1:

输入:num = "52"
输出:"5"
解释:非空子字符串仅有 "5"、"2" 和 "52" 。"5" 是其中唯一的奇数。

示例 2:

输入:num = "4206"
输出:""
解释:在 "4206" 中不存在奇数。

示例 3:

输入:num = "35427"
输出:"35427"
解释:"35427" 本身就是一个奇数。

 

提示:

  • 1 <= num.length <= 105
  • num 仅由数字组成且不含前导零
lightbulb

解题思路

方法一:逆序遍历

我们可以从后往前遍历字符串,找到第一个奇数,然后返回从开头到该奇数的子字符串即可。如果不存在奇数,则返回空字符串。

时间复杂度 O(n)O(n),其中 nn 是字符串 numnum 的长度。忽略答案字符串的空间消耗,空间复杂度 O(1)O(1)

1
2
3
4
5
6
7
class Solution:
    def largestOddNumber(self, num: str) -> str:
        for i in range(len(num) - 1, -1, -1):
            if (int(num[i]) & 1) == 1:
                return num[: i + 1]
        return ''
speed

复杂度分析

指标
时间O(n)
空间O(1)
psychology

面试官常问的追问

外企场景
  • question_mark

    Asks about scanning from left vs right and why greedy works here

  • question_mark

    Mentions handling extremely long numeric strings efficiently

  • question_mark

    Probes understanding of odd/even digit significance for substring selection

warning

常见陷阱

外企场景
  • error

    Checking every possible substring leads to O(n^2) time complexity, which is unnecessary

  • error

    Returning the first odd digit from the start instead of the last may produce a smaller number

  • error

    Forgetting to return empty string when no odd digit exists

swap_horiz

进阶变体

外企场景
  • arrow_right_alt

    Find the smallest odd substring instead of the largest

  • arrow_right_alt

    Allow non-contiguous digits but still maximize odd value

  • arrow_right_alt

    Handle strings with leading zeros or negative signs

help

常见问题

外企场景

字符串中的最大奇数题解:贪心·invariant | LeetCode #1903 简单