สมมติว่าเรามีสตริงที่เข้ารหัสหนึ่งสตริง ซึ่งการทำซ้ำของสตริงย่อยจะแสดงเป็นสตริงย่อยตามด้วยจำนวนสตริงย่อย ดังนั้นหากสตริงเป็นเหมือน 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