Calculate maximum value using ‘+’ or ‘*’ sign between two numbers in a string
Last Updated :
15 Sep, 2023
Given a string of numbers, the task is to find the maximum value from the string, you can add a ‘+’ or ‘*’ sign between any two numbers.
Examples:
Input : 01231
Output :
((((0 + 1) + 2) * 3) + 1) = 10
In above manner, we get the maximum value i.e. 10
Input : 891
Output :73
As 8*9*1 = 72 and 8*9+1 = 73.So, 73 is maximum.
Asked in : Facebook
The task is pretty simple as we can get the maximum value on multiplying all values but the point is to handle the case of 0 and 1 i.e. On multiplying with 0 and 1 we get the lower value as compared to on adding with 0 and 1.
So, use ‘*’ sign between any two numbers(except numbers containing 0 and 1) and use ‘+’ if any of the numbers is 0 and 1.
Implementation:
C++
#include <bits/stdc++.h>
using namespace std;
int calcMaxValue(string str)
{
int res = str[0] - '0' ;
for ( int i = 1; i < str.length(); i++)
{
if (str[i] == '0' || str[i] == '1' ||
res < 2 )
res += (str[i]- '0' );
else
res *= (str[i]- '0' );
}
return res;
}
int main()
{
string str = "01891" ;
cout << calcMaxValue(str);
return 0;
}
|
Java
public class GFG
{
static int calcMaxValue(String str)
{
int res = str.charAt( 0 ) - '0' ;
for ( int i = 1 ; i < str.length(); i++)
{
if (str.charAt(i) == '0' || str.charAt(i) == '1' ||
res < 2 )
res += (str.charAt(i)- '0' );
else
res *= (str.charAt(i)- '0' );
}
return res;
}
public static void main(String[] args)
{
String str = "01891" ;
System.out.println(calcMaxValue(str));
}
}
|
Python3
def calcMaxValue( str ):
res = ord ( str [ 0 ]) - 48
for i in range ( 1 , len ( str )):
if ( str [i] = = '0' or
str [i] = = '1' or res < 2 ):
res + = ord ( str [i]) - 48
else :
res * = ord ( str [i]) - 48
return res
if __name__ = = "__main__" :
str = "01891" ;
print (calcMaxValue( str ));
|
C#
using System;
class GFG
{
static int calcMaxValue(String str)
{
int res = str[0] - '0' ;
for ( int i = 1; i < str.Length; i++)
{
if (str[i] == '0' ||
str[i] == '1' || res < 2 )
res += (str[i] - '0' );
else
res *= (str[i] - '0' );
}
return res;
}
static public void Main ()
{
String str = "01891" ;
Console.Write(calcMaxValue(str));
}
}
|
PHP
<?php
function calcMaxValue( $str )
{
$res = $str [0] - '0' ;
for ( $i = 1; $i < strlen ( $str ); $i ++)
{
if ( $str [ $i ] == '0' || $str [ $i ] == '1' ||
$res < 2 )
$res += ( $str [ $i ] - '0' );
else
$res *= ( $str [ $i ] - '0' );
}
return $res ;
}
$str = "01891" ;
echo calcMaxValue( $str );
?>
|
Javascript
<script>
function calcMaxValue(str)
{
let res = str[0].charCodeAt() -
'0' .charCodeAt();
for (let i = 1; i < str.length; i++)
{
if (str[i] == '0' ||
str[i] == '1' || res < 2 )
res += (str[i].charCodeAt() -
'0' .charCodeAt());
else
res *= (str[i].charCodeAt() -
'0' .charCodeAt());
}
return res;
}
let str = "01891" ;
document.write(calcMaxValue(str));
</script>
|
Time complexity : O(n)
Auxiliary Space : O(1)
Above program consider the case of small inputs i.e. up to which C/C++ can handle the range of maximum value.
Share your thoughts in the comments
Please Login to comment...