1903. 字符串中的最大奇数
题目描述
给你一个字符串 num ,表示一个大整数。请你在字符串 num 的所有 非空子字符串 中找出 值最大的奇数 ,并以字符串形式返回。如果不存在奇数,则返回一个空字符串 "" 。
子字符串 是字符串中的一个连续的字符序列。
示例 1:
输入:num = "52" 输出:"5" 解释:非空子字符串仅有 "5"、"2" 和 "52" 。"5" 是其中唯一的奇数。
示例 2:
输入:num = "4206" 输出:"" 解释:在 "4206" 中不存在奇数。
示例 3:
输入:num = "35427" 输出:"35427" 解释:"35427" 本身就是一个奇数。
提示:
1 <= num.length <= 105num仅由数字组成且不含前导零
解法
方法一:逆序遍历
思考
数值上最大的奇子串必是原串的某个前缀,且该前缀应以奇数结尾。\(n\le 10^5\),不能把所有前缀转成整数再比较。
从右向左扫描即可:第一个奇数数字使以其为结尾的前缀同时满足“奇数”与“最长”,因而也最大。
若不存在奇数位,则答案为空串。整段扫描一次,额外空间为常数。
我们可以从后往前遍历字符串,找到第一个奇数,然后返回从开头到该奇数的子字符串即可。如果不存在奇数,则返回空字符串。
时间复杂度 \(O(n)\),其中 \(n\) 是字符串 \(num\) 的长度。忽略答案字符串的空间消耗,空间复杂度 \(O(1)\)。
1 2 3 4 5 6 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |