मान लीजिए कि हमारे पास एक एन्कोडेड स्ट्रिंग है, जहां सबस्ट्रिंग के दोहराव को सबस्ट्रिंग के रूप में दर्शाया जाता है और उसके बाद सबस्ट्रिंग की गिनती होती है। इसलिए यदि स्ट्रिंग ab2cd2 की तरह है, तो यह ababcdcd को इंगित करता है, और यदि k =4 है, तो यह kth वर्ण लौटाएगा, जो कि b यहाँ है।
इसे हल करने के लिए, हम शुरू में खाली डिक्रिप्टेड स्ट्रिंग लेते हैं, फिर सबस्ट्रिंग और इसकी आवृत्ति को एक-एक करके पढ़कर स्ट्रिंग को डीकंप्रेस करते हैं। फिर डिक्रिप्टेड स्ट्रिंग में करंट सबस्ट्रिंग को उसकी फ्रीक्वेंसी से जोड़ दें। हम इस प्रक्रिया को तब तक दोहराएंगे जब तक कि स्ट्रिंग समाप्त न हो जाए, और Kth वर्ण को डिक्रिप्टेड स्ट्रिंग से प्रिंट करें।
उदाहरण
#include<iostream> using namespace std; char findKthCharacter(string str,int k) { string decrypted = ""; string temp; int occurrence = 0; for (int i=0; str[i]!='\0'; ){ temp = ""; occurrence = 0; while (str[i]>='a' && str[i]<='z'){ temp += str[i]; i++; } while (str[i]>='1' && str[i]<='9') { occurrence = occurrence*10 + str[i] - '0'; i++; } for (int j=1; j<=occurrence; j++) decrypted = decrypted + temp; } if (occurrence==0) decrypted = decrypted + temp; return decrypted[k-1]; } int main() { string str = "ab4c12ed3"; int k = 21; cout << k << "th character in decrypted string: " << findKthCharacter(str, k); }
आउटपुट
डिक्रिप्टेड स्ट्रिंग में21th character in decrypted string: e