# Find k’th character of decrypted string | Set 1

• Difficulty Level : Medium
• Last Updated : 04 Jul, 2022

Given an encoded string, where repetitions of substrings are represented as substring followed by count of substrings. For example, if encrypted string is “ab2cd2” and k=4 , so output will be ‘b’ because decrypted string is “ababcdcd” and 4th character is ‘b’.

Note: Frequency of encrypted substring can be of more than one digit. For example, in “ab12c3”, ab is repeated 12 times. No leading 0 is present in frequency of substring. Examples:

```Input: "a2b2c3", k = 5
Output: c
Decrypted string is "aabbccc"

Input : "ab4c2ed3", k = 9
Output : c
Decrypted string is "ababababccededed"

Input: "ab4c12ed3", k = 21
Output: e
Decrypted string is "ababababccccccccccccededed"```

Approach:

1. The idea is simple, Initially take empty decrypted string.
2. decompress the string by reading substring and it’s frequency one by one and append current substring in decrypted string by it’s frequency.
3. Repeat the process till the end of string
4. print the Kth character from decrypted string.

Algorithm:

• Step 1: Initialize a string with the given encoded string and the value of k.
• Step 2: Find the kth character in the encoded string.
• Step 3: Check if last character of the string is alphabet or numeric value, if it’s alphabet i.e. frequency is zero, append it to the string and return (k-1)th index.
• Step 4: Print the output.

Implementation:

## C++

 `// C++ program to find K'th character in ` `// decrypted string ` `#include ` `using` `namespace` `std; ` ` `  `// Function to find K'th character in Encoded String ` `char` `encodedChar(string str,``int` `k) ` `{ ` `    ``// expand string variable is used to ` `    ``// store final string after decompressing string str ` `    ``string expand = ``""``; ` ` `  `    ``string temp;  ``// Current substring ` `    ``int` `freq = 0; ``// Count of current substring ` ` `  `    ``for` `(``int` `i=0; str[i]!=``'\0'``; ) ` `    ``{ ` `        ``temp = ``""``; ``// Current substring ` `        ``freq = 0; ``// count frequency of current substring ` ` `  `        ``// read characters until you find a number ` `        ``// or end of string ` `        ``while` `(str[i]>=``'a'` `&& str[i]<=``'z'``) ` `        ``{ ` `            ``// push character in temp ` `            ``temp.push_back(str[i]); ` `            ``i++; ` `        ``} ` ` `  `        ``// read number for how many times string temp ` `        ``// will be repeated in decompressed string ` `        ``while` `(str[i]>=``'1'` `&& str[i]<=``'9'``) ` `        ``{ ` `            ``// generating frequency of temp ` `            ``freq = freq*10 + str[i] - ``'0'``; ` `            ``i++; ` `        ``} ` ` `  `        ``// now append string temp into expand ` `        ``// equal to its frequency ` `        ``for` `(``int` `j=1; j<=freq; j++) ` `            ``expand.append(temp); ` `    ``} ` ` `  `    ``// this condition is to handle the case ` `    ``// when string str is ended with alphabets ` `    ``// not with numeric value ` `    ``if` `(freq==0) ` `        ``expand.append(temp); ` ` `  `    ``return` `expand[k-1]; ` `} ` ` `  `// Driver program to test the string ` `int` `main() ` `{ ` `    ``string str = ``"ab4c12ed3"``; ` `    ``int` `k = 21; ` `    ``cout << encodedChar(str, k) << endl; ` `    ``return` `0; ` `} `

## Java

 `// Java program to find K'th character in ` `// decrypted string ` `public` `class` `GFG { ` `      `  `    ``// Function to find K'th character in  ` `    ``// Encoded String ` `    ``static` `char` `encodedChar(String str,``int` `k) ` `    ``{ ` `        ``// expand string variable is used to ` `        ``// store final string after decompressing  ` `        ``// string str ` `        ``String expand = ``""``; ` `      `  `        ``String temp = ``""``;  ``// Current substring ` `        ``int` `freq = ``0``; ``// Count of current substring ` `      `  `        ``for` `(``int` `i=``0``; i < str.length() ; ) ` `        ``{ ` `            ``temp = ``""``; ``// Current substring ` `            ``freq = ``0``; ``// count frequency of current ` `                      ``// substring ` `      `  `            ``// read characters until you find a number ` `            ``// or end of string ` `            ``while` `(i < str.length() && str.charAt(i)>=``'a'` `                                ``&& str.charAt(i)<=``'z'``) ` `            ``{ ` `                ``// push character in temp ` `                ``temp += str.charAt(i); ` `                ``i++; ` `            ``} ` `      `  `            ``// read number for how many times string temp ` `            ``// will be repeated in decompressed string ` `            ``while` `(i < str.length() && str.charAt(i)>=``'1'` `                                ``&& str.charAt(i)<=``'9'``) ` `            ``{ ` `                ``// generating frequency of temp ` `                ``freq = freq*``10` `+ str.charAt(i) - ``'0'``; ` `                ``i++; ` `            ``} ` `      `  `            ``// now append string temp into expand ` `            ``// equal to its frequency ` `            ``for` `(``int` `j=``1``; j<=freq; j++) ` `                 ``expand += temp; ` `        ``} ` `      `  `        ``// this condition is to handle the case ` `        ``// when string str is ended with alphabets ` `        ``// not with numeric value ` `        ``if` `(freq==``0``) ` `            ``expand += temp; ` `      `  `        ``return` `expand.charAt(k-``1``); ` `    ``} ` `      `  `    ``// Driver program to test the string ` `    ``public` `static` `void` `main(String args[]) ` `    ``{ ` `        ``String str = ``"ab4c12ed3"``; ` `        ``int` `k = ``21``; ` `        ``System.out.println(encodedChar(str, k)); ` `    ``} ` `} ` `// This code is contributed by Sumit Ghosh `

## Python3

 `# Python 3 program to find K'th character  ` `# in decrypted string ` ` `  `# Function to find K'th character  ` `# in Encoded String ` `def` `encodedChar(``str``, k): ` `     `  `    ``# expand string variable is used  ` `    ``# to store final string after  ` `    ``# decompressing string str ` `    ``expand ``=` `"" ` ` `  `    ``# Current substring ` `    ``freq ``=` `0` `# Count of current substring ` `    ``i ``=` `0` `    ``while``(i < ``len``(``str``)): ` `        ``temp ``=` `"" ``# Current substring ` `        ``freq ``=` `0` `# count frequency of current substring ` ` `  `        ``# read characters until you find  ` `        ``# a number or end of string ` `        ``while` `(i < ``len``(``str``) ``and` `               ``ord``(``str``[i]) >``=` `ord``(``'a'``) ``and`  `               ``ord``(``str``[i]) <``=` `ord``(``'z'``)): ` `                    `  `            ``# push character in temp ` `            ``temp ``+``=` `str``[i] ` `            ``i ``+``=` `1` ` `  `        ``# read number for how many times string temp ` `        ``# will be repeated in decompressed string ` `        ``while` `(i < ``len``(``str``) ``and`  `               ``ord``(``str``[i]) >``=` `ord``(``'1'``) ``and` `               ``ord``(``str``[i]) <``=` `ord``(``'9'``)): ` `                    `  `            ``# generating frequency of temp ` `            ``freq ``=` `freq ``*` `10` `+` `ord``(``str``[i]) ``-` `ord``(``'0'``) ` `            ``i ``+``=` `1` ` `  `        ``# now append string temp into expand ` `        ``# equal to its frequency ` `        ``for` `j ``in` `range``(``1``, freq ``+` `1``, ``1``): ` `            ``expand ``+``=` `temp ` ` `  `    ``# this condition is to handle the case ` `    ``# when string str is ended with alphabets ` `    ``# not with numeric value ` `    ``if` `(freq ``=``=` `0``): ` `        ``expand ``+``=` `temp ` ` `  `    ``return` `expand[k ``-` `1``] ` ` `  `# Driver Code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``str` `=` `"ab4c12ed3"` `    ``k ``=` `21` `    ``print``(encodedChar(``str``, k)) ` ` `  `# This code is contributed by ` `# Shashank_Sharma `

## C#

 `// C# program to find K'th  ` `// character in decrypted string ` `using` `System; ` ` `  `class` `GFG ` `{ ` `     `  `    ``// Function to find K'th ` `    ``// character in Encoded String ` `    ``static` `char` `encodedChar(``string` `str, ``int` `k) ` `    ``{ ` `        ``// expand string variable is  ` `        ``// used to store final string  ` `        ``// after decompressing string str ` `        ``String expand = ``""``; ` `     `  `        ``String temp = ``""``; ``// Current substring ` `        ``int` `freq = 0; ``// Count of current substring ` `     `  `        ``for` `(``int` `i = 0; i < str.Length ; ) ` `        ``{ ` `            ``temp = ``""``; ``// Current substring ` `            ``freq = 0; ``// count frequency of current ` `                      ``// substring ` `     `  `            ``// read characters until you  ` `            ``// find a number or end of string ` `            ``while` `(i < str.Length && str[i]>=``'a'` `                                  ``&& str[i]<=``'z'``) ` `            ``{ ` `                ``// push character in temp ` `                ``temp += str[i]; ` `                ``i++; ` `            ``} ` `     `  `            ``// read number for how many times  ` `            ``// string temp will be repeated  ` `            ``// in decompressed string ` `            ``while` `(i < str.Length && str[i] >= ``'1'` `                                  ``&& str[i] <= ``'9'``) ` `            ``{ ` `                ``// generating frequency of temp ` `                ``freq = freq * 10 + str[i] - ``'0'``; ` `                ``i++; ` `            ``} ` `     `  `            ``// now append string temp into  ` `            ``// expand equal to its frequency ` `            ``for` `(``int` `j = 1; j <= freq; j++) ` `                ``expand += temp; ` `        ``} ` `     `  `        ``// this condition is to handle  ` `        ``// the case when string str is  ` `        ``// ended with alphabets not  ` `        ``// with numeric value ` `        ``if` `(freq == 0) ` `            ``expand += temp; ` `     `  `        ``return` `expand[k - 1]; ` `    ``} ` `     `  `    ``// Driver Code ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``string` `str = ``"ab4c12ed3"``; ` `        ``int` `k = 21; ` `        ``Console.Write(encodedChar(str, k)); ` `    ``} ` `} ` ` `  `// This code is contributed  ` `// by ChitraNayal `

## Javascript

 ``

Output

`e`

Time Complexity: O(N) where N is length of string.
Auxiliary Space: O(1)

Exercise : The above solution builds the decoded string to find k’th character. Extend the solution to work in O(1) extra space.
Find k-th character of decrypted string | Set – 2

This article is contributed by Shashank Mishra ( Gullu ) and reviewed by team GeeksforGeeks. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up
Recommended Articles
Page :