Given an integer ‘k’ and a string ‘str’ consisting of characters from English alphabets. The task is to convert all lower case character to uppercase whose ASCII value is co-prime with k.
Examples:
Input: str = “geeksforgeeks”, k = 4
Output: GEEKSfOrGEEKS
‘f’ and ‘r’ are the only characters whose ASCII values aren’t co-prime with 4.Input: str = “Ac”, k = 2
Output: AC
The only lower case character is ‘c’ and ASCII value of ‘c’ is 99 which is co-prime with 2.
Approach:
- Iterate over all characters in the given string to check whether the current character is lowercase and if its ASCII value is co-prime with ‘k’
- To check for co-prime, check that if the gcd of the value with k is ‘1’ or not.
- If the above condition is satisfied then convert that lowercase alphabet to uppercase alphabet.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std;
// function to modify the string void convert_str(string s, int k)
{ // length of the string
int l = s.length();
for ( int i = 0; i < l; i++) {
int ascii = ( int )s[i];
// check if the character is
// lowercase and co-prime with k
if (ascii >= 'a' && ascii <= 'z'
&& __gcd(ascii, k) == 1) {
// change the character
// to upper-case
char c = s[i] - 32;
s[i] = c;
}
}
cout << s << "\n" ;
} // Driver code int main()
{ string s = "geeksforgeeks" ;
int k = 4;
convert_str(s, k);
return 0;
} |
Java
// Java implementation of the approach class GFG
{ // function to modify the string static void convert_str(String str, int k)
{
// length of the string
char [] s = str.toCharArray();
int l = s.length;
for ( int i = 0 ; i < l; i++)
{
int ascii = ( int ) s[i];
// check if the character is
// lowercase and co-prime with k
if (ascii >= 'a' && ascii <= 'z'
&& __gcd(ascii, k) == 1 )
{
// change the character
// to upper-case
char c = ( char ) (s[i] - 32 );
s[i] = c;
}
}
System.out.println(String.valueOf(s));
}
static int __gcd( int a, int b)
{
// Everything divides 0
if (a == 0 )
{
return b;
}
if (b == 0 )
{
return a;
}
// base case
if (a == b)
{
return a;
}
// a is greater
if (a > b)
{
return __gcd(a - b, b);
}
return __gcd(a, b - a);
}
// Driver code
public static void main(String[] args)
{
String s = "geeksforgeeks" ;
int k = 4 ;
convert_str(s, k);
}
} // This code is contributed by 29AjayKumar |
Python3
# Python3 implementation of the approach from math import gcd
# function to modify the string def convert_str(s, k):
modified_string = ""
for i in range ( 0 , len (s)):
ascii = ord (s[i])
# check if the character is
# lowercase and co-prime with k
if (ascii > = ord ( 'a' ) and
ascii < = ord ( 'z' ) and
gcd(ascii, k) = = 1 ):
# change the character to upper-case
modified_string + = chr (ascii - 32 )
else :
modified_string + = s[i]
print (modified_string)
# Driver code if __name__ = = "__main__" :
s = "geeksforgeeks"
k = 4
convert_str(s, k)
# This code is contributed by Rituraj Jain |
C#
// C# implementation of the approach using System;
class GFG
{ // function to modify the string
static void convert_str(String str, int k)
{
// length of the string
char [] s = str.ToCharArray();
int l = s.Length;
for ( int i = 0; i < l; i++)
{
int ascii = ( int ) s[i];
// check if the character is
// lowercase and co-prime with k
if (ascii >= 'a' && ascii <= 'z'
&& __gcd(ascii, k) == 1)
{
// change the character
// to upper-case
char c = ( char ) (s[i] - 32);
s[i] = c;
}
}
Console.WriteLine(String.Join( "" , s));
}
static int __gcd( int a, int b)
{
// Everything divides 0
if (a == 0)
{
return b;
}
if (b == 0)
{
return a;
}
// base case
if (a == b)
{
return a;
}
// a is greater
if (a > b)
{
return __gcd(a - b, b);
}
return __gcd(a, b - a);
}
// Driver code
public static void Main()
{
String s = "geeksforgeeks" ;
int k = 4;
convert_str(s, k);
}
} // This code is contributed by PrinciRaj1992 |
Javascript
<script> // JavaScript implementation of the approach
// function to modify the string
function convert_str(s, k) {
// length of the string
var l = s.length;
var newStr = "" ;
for ( var i = 0; i < l; i++) {
var ascii = s[i].charCodeAt(0);
// check if the character is
// lowercase and co-prime with k
if (
ascii >= "a" .charCodeAt(0) &&
ascii <= "z" .charCodeAt(0) &&
__gcd(ascii, k) === 1
) {
// change the character
// to upper-case
var c = String.fromCharCode(s[i].charCodeAt(0) - 32);
newStr += c;
} else {
newStr += s[i];
}
}
document.write(newStr);
}
function __gcd(a, b) {
// Everything divides 0
if (a === 0) {
return b;
}
if (b === 0) {
return a;
}
// base case
if (a === b) {
return a;
}
// a is greater
if (a > b) {
return __gcd(a - b, b);
}
return __gcd(a, b - a);
}
// Driver code
var s = "geeksforgeeks" ;
var k = 4;
convert_str(s, k);
</script>
|
PHP
<?php // PHP implementation of the approach // function to modify the string function convert_str( $str , $k )
{ // length of the string
$l = strlen ( $str );
$modified_string = "" ;
for ( $i = 0; $i < $l ; $i ++)
{
$ascii = ord( $str [ $i ]);
// check if the character is
// lowercase and co-prime with k
if ( $ascii >= ord( 'a' ) &&
$ascii <= ord( 'z' ) &&
__gcd( $ascii , $k ) == 1)
{
// change the character to upper-case
$modified_string = $modified_string . chr ( $ascii - 32);
}
else
{
$modified_string = $modified_string . $str [ $i ];
}
}
echo ( $modified_string );
} function __gcd( $a , $b )
{ // Everything divides 0
if ( $a == 0)
{
return $b ;
}
if ( $b == 0)
{
return $a ;
}
// base case
if ( $a == $b )
{
return $a ;
}
// a is greater
if ( $a > $b )
{
return __gcd( $a - $b , $b );
}
return __gcd( $a , $b - $a );
} // Driver code $s = "geeksforgeeks" ;
$k = 4;
convert_str( $s , $k );
// This code is contributed by ita_c ?> |
Output
GEEKSfOrGEEKS
Complexity Analysis:
- Time Complexity: O(L), where L is the length of string.
- Auxiliary Space: O(1)