查找解密字符串的第 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