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.
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.
Constraints:
1 <= num.length <= 105
num
only consists of digits and does not contain any leading zeros.
Solution
/**
* @param {string} num
* @return {string}
*/
var largestOddNumber = function(num) {
var lastNonZeroNumIndex = -1;
var firstOddNumIndex = -1;
for (var i = num.length - 1; i >= 0; i--) {
if (firstOddNumIndex === -1 && (Number(num[i]) % 2)) {
firstOddNumIndex = i;
}
if (num[i] !== '0') {
lastNonZeroNumIndex = i;
}
}
return firstOddNumIndex === -1
? '' :
num.slice(lastNonZeroNumIndex, firstOddNumIndex + 1)
};
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(1).