Given a string
Examples:
Input : str = "47", a = 4, b = 7 Output : 4 Input : str = "23", a = 4, b = 7 Output : -1
The idea is to observe that we need to find the substring with maximum number of occurrences. So, if we consider substrings that contains both a’s and b’s then the number of occurrences will be less than if we consider the substrings with single digits ‘a’ and ‘b’ individually.
So, the idea is to calculate the frequency of digits of ‘a’ and ‘b’ in the string and the one with maximum frequency will be the answer.
Note: If both digits have same frequency then the digit which is lexicographically smaller among ‘a’ and ‘b’ will be the answer.
Below is the implementation of the above approach:
// CPP program to Find the lexicographically // smallest substring in a given string with // maximum frequency and contains a's and b's only #include <bits/stdc++.h> using namespace std;
// Function to Find the lexicographically // smallest substring in a given string with // maximum frequency and contains a's and b's only. int maxFreq(string s, int a, int b)
{ // To store frequency of digits
int fre[10] = { 0 };
// size of string
int n = s.size();
// Take lexicographically larger digit in b
if (a > b)
swap(a, b);
// get frequency of each character
for ( int i = 0; i < n; i++)
fre[s[i] - '0' ]++;
// If no such string exits
if (fre[a] == 0 and fre[b] == 0)
return -1;
// Maximum frequency
else if (fre[a] >= fre[b])
return a;
else
return b;
} // Driver program int main()
{ int a = 4, b = 7;
string s = "47744" ;
cout << maxFreq(s, a, b);
return 0;
} |
// Java program to Find the lexicographically // smallest substring in a given string with // maximum frequency and contains a's and b's only import java.io.*;
class GFG {
// Function to Find the lexicographically // smallest substring in a given string with // maximum frequency and contains a's and b's only. static int maxFreq(String s, int a, int b)
{ // To store frequency of digits
int fre[] = new int [ 10 ];
// size of string
int n = s.length();
// Take lexicographically larger digit in b
if (a > b)
{
int temp = a;
a =b;
b = temp;
}
// get frequency of each character
for ( int i = 0 ; i < n; i++)
fre[s.charAt(i) - '0' ]++;
// If no such string exits
if (fre[a] == 0 && fre[b] == 0 )
return - 1 ;
// Maximum frequency
else if (fre[a] >= fre[b])
return a;
else
return b;
} // Driver program public static void main (String[] args) {
int a = 4 , b = 7 ;
String s = "47744" ;
System.out.print(maxFreq(s, a, b));
}
} // This code is contributed by inder_verma |
# Python 3 program to Find the lexicographically # smallest substring in a given string with # maximum frequency and contains a's and b's only # Function to Find the lexicographically # smallest substring in a given string with # maximum frequency and contains a's and b's only. def maxFreq(s, a, b):
# To store frequency of digits
fre = [ 0 for i in range ( 10 )]
# size of string
n = len (s)
# Take lexicographically larger digit in b
if (a > b):
swap(a, b)
# get frequency of each character
for i in range ( 0 ,n, 1 ):
a = ord (s[i]) - ord ( '0' )
fre[a] + = 1
# If no such string exits
if (fre[a] = = 0 and fre[b] = = 0 ):
return - 1
# Maximum frequency
elif (fre[a] > = fre[b]):
return a
else :
return b
# Driver program if __name__ = = '__main__' :
a = 4
b = 7
s = "47744"
print (maxFreq(s, a, b))
# This code is contributed by # Surendra_Gangwar |
// C# program to Find the lexicographically // smallest substring in a given string with // maximum frequency and contains a's and b's only using System;
class GFG {
// Function to Find the lexicographically // smallest substring in a given string with // maximum frequency and contains a's and b's only. static int maxFreq( string s, int a, int b)
{ // To store frequency of digits
int []fre = new int [10];
// size of string
int n = s.Length;
// Take lexicographically larger digit in b
if (a > b)
{
int temp = a;
a =b;
b = temp;
}
// get frequency of each character
for ( int i = 0; i < n; i++)
fre[s[i] - '0' ]++;
// If no such string exits
if (fre[a] == 0 && fre[b] == 0)
return -1;
// Maximum frequency
else if (fre[a] >= fre[b])
return a;
else
return b;
} // Driver program public static void Main () {
int a = 4, b = 7;
string s = "47744" ;
Console.WriteLine(maxFreq(s, a, b));
}
} // This code is contributed by inder_verma |
<?php // PHP program to Find the lexicographically // smallest substring in a given string with // maximum frequency and contains a's and b's only // Function to Find the lexicographically // smallest substring in a given string with // maximum frequency and contains a's and b's only. function maxFreq( $s , $a , $b )
{ // To store frequency of digits
$fre = array_fill (0, 10, 0);
// size of string
$n = strlen ( $s );
// Take lexicographically larger digit in b
if ( $a > $b )
{
$xx = $a ;
$a = $b ;
$b = $xx ;}
// get frequency of each character
for ( $i = 0; $i < $n ; $i ++)
{
$a = ord( $s [ $i ]) - ord( '0' );
$fre [ $a ] += 1;
}
// If no such string exits
if ( $fre [ $a ] == 0 and $fre [ $b ] == 0)
return -1;
// Maximum frequency
else if ( $fre [ $a ] >= $fre [ $b ])
return $a ;
else
return $b ;
} // Driver Code $a = 4;
$b = 7;
$s = "47744" ;
print (maxFreq( $s , $a , $b ));
// This code is contributed by mits ?> |
<script> // JavaScript program to Find the lexicographically
// smallest substring in a given string with
// maximum frequency and contains a's and b's only
// Function to Find the lexicographically
// smallest substring in a given string with
// maximum frequency and contains a's and b's only.
function maxFreq(s, a, b)
{
// To store frequency of digits
var fre = new Array(10).fill(0);
// size of string
var n = s.length;
// Take lexicographically larger digit in b
if (a > b) {
var temp = a;
a = b;
b = temp;
}
// get frequency of each character
for ( var i = 0; i < n; i++)
fre[s[i].charCodeAt(0) - "0" .charCodeAt(0)]++;
// If no such string exits
if (fre[a] === 0 && fre[b] === 0) return -1;
// Maximum frequency
else if (fre[a] >= fre[b]) return a;
else return b;
}
// Driver program
var a = 4,
b = 7;
var s = "47744" ;
document.write(maxFreq(s, a, b));
// This code is contributed by rdtank.
</script>
|
Output
4
Complexity Analysis:
- Time Complexity: O(n), where n is the length of the string s.
- Auxiliary Space: O(10)