跳至主要內容

1903. 字符串中的最大奇数

ITCharge大约 2 分钟

1903. 字符串中的最大奇数open in new window

  • 标签:贪心、数学、字符串
  • 难度:简单

题目链接

题目大意

描述:给定一个字符串 numnum,表示一个大整数。

要求:在字符串 numnum 的所有非空子字符串中找出值最大的奇数,并以字符串形式返回。如果不存在奇数,则返回一个空字符串 ""

说明

  • 子字符串:指的是字符串中一个连续的字符序列。
  • 1num.length1051 \le num.length \le 10^5
  • numnum 仅由数字组成且不含前导零。

示例

  • 示例 1:
输入:num = "52"
输出:"5"
解释:非空子字符串仅有 "5""2""52""5" 是其中唯一的奇数。
  • 示例 2:
输入:num = "4206"
输出:""
解释:在 "4206" 中不存在奇数。

解题思路

思路 1:贪心算法

如果某个数 xx 为奇数,则 xx 末尾位上的数字一定为奇数。那么我们只需要在末尾为奇数的字符串中考虑最大的奇数即可。显而易见的是,最大的奇数一定是长度最长的那个。所以我们只需要逆序遍历字符串,找到第一个奇数,从整个字符串开始位置到该奇数位置所代表的整数,就是最大的奇数。具体步骤如下:

  1. 逆序遍历字符串 ss
  2. 找到第一个奇数位置 ii,则 num[0:i+1]num[0: i + 1] 为最大的奇数,将其作为答案返回。

思路 1:代码

class Solution:
    def largestOddNumber(self, num: str) -> str:
        for i in range(len(num) - 1, -1, -1):
            if int(num[i]) % 2 == 1:
                return num[0: i + 1]
        return ""

思路 1:复杂度分析

  • 时间复杂度O(n)O(n)
  • 空间复杂度O(1)O(1)