Kth character after replacing each character of String by its frequency exactly X times - GeeksforGeeks

06 Sep, 2021
Given a string S consisting of N digits from [1, 9] and a positive integer K and X. Every day each character of the string is replaced by its frequency and value. The task is to find the Kth character of the string after X days.
Examples:
Input: S = “1214”, K = 10, X = 3Output: 4Explanation:1st day = “12214444”2nd day = “1222214444444444444444”3rd day = “122222222444444444444444444444444444444444444444444444444” So, 10th character after 3rd day is 4.
Input: S =”123′′, K = 6, X = 2 Output: 3
Naive Approach: The simplest approach to solve the problem is to create the string by appending the digits in the string digitX times and find the Kth character of the string.
Time Complexity: O(∑digit[i]X) for i in range [0, N-1]
Efficient Approach: The above approach can be optimized further by instead of creating a string add digitX to the sum and check if sum > K. Follow the steps below to solve the problem:
Initialize a variable, say sum that stores the sum of the character of the string after X days.
Initialize a variable, say ans that stores the Kth characters after X days.
Iterate in the range [0, N-1] and perform the following steps:Initialize a variable say range as (S[i] – ‘0’)X and add it to the variable sum.If sum>=K, return S, modify ans as S[i], and terminate the loop.
Initialize a variable say range as (S[i] – ‘0’)X and add it to the variable sum.
If sum>=K, return S, modify ans as S[i], and terminate the loop.
Print the value of ans as the answer.
Below is the implementation of the above approach:
C++
Java
Python3
C#
Javascript
// C++ program for the above approach#include <bits/stdc++.h>using namespace std; // Function to find the Kth character// after X dayschar FindKthChar(string str, long long K, int X){     // Variable to store the KthChar    char ans;    int sum = 0;     // Traverse the string    for (int i = 0; i < str.length(); i++) {         // Convert char into int        int digit = str[i] - '0';         // Calculate characters        int range = pow(digit, X);        sum += range;         // If K is less than sum        // than ans = str[i]        if (K <= sum) {            ans = str[i];            break;        }    }    // Return answer    return ans;} // Driver Codeint main(){    // Given Input    string str = "123";    long long K = 9;    int X = 3;     // Function Call    char ans = FindKthChar(str, K, X);    cout << ans << "\n";    return 0;}
// Java program for the above approachclass GFG{ // Function to find the Kth character// after X daysstatic char FindKthChar(String str, int K, int X){         // Variable to store the KthChar    char ans = ' ';    int sum = 0;     // Traverse the string    for(int i = 0; i < str.length(); i++)    {                 // Convert char into int        int digit = (int)str.charAt(i) - 48;         // Calculate characters        int range = (int)Math.pow(digit, X);        sum += range;         // If K is less than sum        // than ans = str[i]        if (K <= sum)        {            ans = str.charAt(i);            break;        }    }     // Return answer    return ans;} // Driver codepublic static void main(String[] args){         // Given Input    String str = "123";    int K = 9;    int X = 3;     // Function Call    char ans = FindKthChar(str, K, X);    System.out.println(ans);}} // This code is contributed by abhinavjain194
# Python3 program for the above approachimport math # Function to find the Kth character# after X daysdef FindKthChar(Str, K, X):          # Variable to store the KthChar    ans = ' '    Sum = 0      # Traverse the string    for i in range(len(Str)):               # Convert char into int        digit = ord(Str[i]) - 48          # Calculate characters        Range = int(math.pow(digit, X))        Sum += Range          # If K is less than sum        # than ans = str[i]        if (K <= Sum):            ans = Str[i]            break          # Return answer    return ans # Given InputStr = "123"K = 9X = 3 # Function Callans = FindKthChar(Str, K, X)print(ans) # This code is contributed by divyeshrabadiya07.
// C# program for the above approachusing System;using System.Collections.Generic; class GFG{ // Function to find the Kth character// after X daysstatic char FindKthChar(string str, int K, int X){         // Variable to store the KthChar    char ans = ' ';    int sum = 0;     // Traverse the string    for(int i = 0; i < str.Length; i++)    {                 // Convert char into int        int digit = (int)str[i] - 48;         // Calculate characters        int range = (int)Math.Pow(digit, X);        sum += range;         // If K is less than sum        // than ans = str[i]        if (K <= sum)        {            ans = str[i];            break;        }    }         // Return answer    return ans;} // Driver Codepublic static void Main(){         // Given Input    string str = "123";    int K = 9;    int X = 3;     // Function Call    char ans = FindKthChar(str, K, X);    Console.Write(ans);}} // This code is contributed by SURENDRA_GANGWAR
<script>// javascript program for the above approach   // Function to find the Kth character    // after X days     function FindKthChar( str , K , X) {         // Variable to store the KthChar        var ans = "";        var sum = 0;         // Traverse the string        for (i = 0; i < str.length; i++) {             // Convert char into int            var digit = parseInt( str[i]);             // Calculate characters            var range = parseInt( Math.pow(digit, X));            sum += range;             // If K is less than sum            // than ans = str[i]            if (K <= sum) {                ans = str[i];                break;            }        }         // Return answer        return ans;    }     // Driver code              // Given Input        var str = "123";        var K = 9;        var X = 3;         // Function Call        var ans = FindKthChar(str, K, X);        document.write(ans); // This code contributed by gauravrajput1</script>
2
Time Complexity: O(N)Auxiliary Space: O(1)
SURENDRA_GANGWAR
abhinavjain194
GauravRajput1
divyeshrabadiya07
frequency-counting
Hash
Strings
Hash
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Quadratic Probing in Hashing
Rearrange an array such that arr[i] = i
Hashing in Java
Load Factor and Rehashing
Hash Functions and list/types of Hash functions
Reverse a string in Java
Write a program to reverse an array or string
C++ Data Types
Longest Common Subsequence | DP-4
Write a program to print all permutations of a given string