📜  查找解密字符串的第 k 个字符|设置 1

📅  最后修改于: 2022-05-13 01:57:07.106000             🧑  作者: Mango

查找解密字符串的第 k 个字符|设置 1

给定一个编码字符串,其中子字符串的重复表示为子字符串,后跟子字符串的计数。例如,如果加密字符串是“ab2cd2”并且 k=4,那么输出将是“b”,因为解密后的字符串是“ababcdcd”,第 4 个字符是“b”。
注意:加密子串的频率可以超过一位。例如,在“ab12c3”中,ab 重复了 12 次。子串的频率中不存在前导 0。
例子:

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"

这个想法很简单。最初取空的解密字符串,然后通过读取子字符串及其频率来解压缩字符串,并按其频率将当前子字符串附加到解密字符串中。重复该过程直到字符串字符串打印第 K 个字符。

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


输出:

e