Problem
You are given a string num
, representing a large integer. Return the largest-valued odd integer (as a string) that is a non-empty substring of num
, or an empty string ""
if no odd integer exists.
A substring is a contiguous sequence of characters within a string.
Examples
Example 1:
Input: num = "52"
Output: "5"
Explanation: The only non-empty substrings are "5", "2", and "52". "5" is the only odd number.
Example 2:
Input: num = "4206"
Output: ""
Explanation: There are no odd numbers in "4206".
Example 3:
Input: num = "35427"
Output: "35427"
Explanation: "35427" is already an odd number.
Solution
Method 1 - Iteration
To find the largest-valued odd integer as a non-empty substring of the given string num
, we need to consider the following points:
- Odd Numbers:
- An integer is odd if its last digit is odd. Therefore, we only need to check the last digit of all possible substrings to determine if the substring represents an odd number.
- Largest-Valued Substring:
- Since the problem requires the largest-valued odd integer, we can start from the end of the string. The largest value would be the longest possible substring ending at the current position if it forms an odd integer.
- Traversal from the End:
- By traversing from the end, we can quickly identify the largest and longest substring that forms an odd integer.
Code
Java
public class Solution {
public String largestOddNumber(String num) {
for (int i = num.length() - 1; i >= 0; i--) {
if ((num.charAt(i) - '0') % 2 != 0) {
return num.substring(0, i + 1);
}
}
return "";
}
}
Python
class Solution:
def largestOddNumber(self, num: str) -> str:
for i in range(len(num) - 1, -1, -1):
if int(num[i]) % 2 != 0:
return num[:i + 1]
return ""
Complexity
- ⏰ Time complexity:
O(n)
, wheren
is the length of the stringnum
. We make a single pass through the string. - 🧺 Space complexity:
O(1)
for storing the result, aside from the input and output storage.