You are given a string num that represents a large integer. Your task is to find and return the largest odd integer that can be obtained as a non-empty substring of num. If no odd integer exists within the string, return an empty string.
Input: num = "52"
Output: "5"
Input: num = "4206"
Output: ""
Input: num = "35427"
Output: "35427"
function largestOddSubstringNaive(num) {
let largestOdd = "";
for (let i = 0; i < num.length; i++) {
for (let j = i + 1; j <= num.length; j++) {
let substring = num.slice(i, j);
if (parseInt(substring) % 2 !== 0 && substring.length > largestOdd.length) {
largestOdd = substring;
}
}
}
return largestOdd;
}function largestOddSubstringRightToLeft(num) {
for (let i = num.length - 1; i >= 0; i--) {
if (num[i] % 2 !== 0) {
return num.slice(0, i + 1);
}
}
return "";
}function largestOddSubstringLastDigit(num) {
let largestOdd = "";
// Scan the string from the end
for (let i = num.length - 1; i >= 0; i--) {
if (num[i] % 2 !== 0) {
largestOdd = num.slice(0, i + 1);
break;
}
}
return largestOdd;
}function largestOddSubstringRegex(num) {
let match = num.match(/.*[13579]/g);
return match ? match[match.length - 1] : "";
}function largestOddSubstringEfficient(num) {
let largestOdd = "";
// Scan from right to left
for (let i = num.length - 1; i >= 0; i--) {
if (num[i] % 2 !== 0) {
largestOdd = num.slice(0, i + 1);
break;
}
}
return largestOdd;
}function largestOddSubstringSlidingWindow(num) {
let largestOdd = "";
let windowStart = 0;
for (let windowEnd = 0; windowEnd < num.length; windowEnd++) {
if (num[windowEnd] % 2 !== 0) {
largestOdd = num.slice(windowStart, windowEnd + 1);
}
}
return largestOdd;
}function largestOddSubstringDP(num) {
let dp = Array(num.length).fill("");
let largestOdd = "";
for (let i = 0; i < num.length; i++) {
dp[i] = num[i] % 2 !== 0 ? num[i] : "";
if (dp[i].length > largestOdd.length) {
largestOdd = dp[i];
}
for (let j = i - 1; j >= 0; j--) {
dp[i] = num.slice(j, i + 1);
if (parseInt(dp[i]) % 2 !== 0 && dp[i].length > largestOdd.length) {
largestOdd = dp[i];
}
}
}
return largestOdd;
}function largestOddSubstringStack(num) {
let stack = [];
let largestOdd = "";
for (let i = 0; i < num.length; i++) {
if (num[i] % 2 !== 0) {
stack.push(num.slice(0, i + 1));
}
}
while (stack.length > 0) {
let candidate = stack.pop();
if (candidate.length > largestOdd.length) {
largestOdd = candidate;
}
}
return largestOdd;
}function largestOddSubstringGreedy(num) {
for (let i = num.length - 1; i >= 0; i--) {
if (num[i] % 2 !== 0) {
return num.slice(0, i + 1);
}
}
return "";
}function largestOddSubstringStringManipulation(num) {
let largestOdd = "";
for (let i = 0; i < num.length; i++) {
for (let j = i; j < num.length; j++) {
let substring = num.substring(i, j + 1);
if (parseInt(substring) % 2 !== 0 && substring.length > largestOdd.length) {
largestOdd = substring;
}
}
}
return largestOdd;
}