อภิปรายปัญหาการจัดเรียงสตริงของตัวอักษรในลำดับที่จัดเรียงแล้ว และบวกจำนวนเต็มทั้งหมดที่มีอยู่ในสตริง ตัวอย่างเช่น:
Input : str = "adv4fc3" Output : "acdfv7" คำอธิบาย: ตัวอักษรทั้งหมดถูกจัดเรียงเป็น "acdfv" ตามด้วยผลรวมของจำนวนเต็ม 4 และ 3 Input: str = "h2d7e3f" Output : "defh12" คำอธิบาย: ตัวอักษรทั้งหมดถูกจัดเรียงเป็น "defh" ตามด้วยผลรวมของจำนวนเต็ม 2, 7, และ 3
วิธีการหาคำตอบ
เรามีสองงานที่ต้องทำในปัญหานี้ หนึ่งคือการจัดเรียงสตริง และอีกอย่างคือการบวกค่าจำนวนเต็ม
- การจัดเรียงสตริงสามารถทำได้โดยการนับจำนวนของทุกตัวอักษรในสตริง และจากนั้นสร้างสตริงใหม่โดยการแทรกตัวอักษรทั้งหมดตามจำนวนของพวกเขา
- เราสามารถทำการบวกจำนวนเต็มได้โดยการบวกจำนวนเต็มเข้าไปในตัวแปรทุกครั้งที่มันเจอ
ตัวอย่าง
โค้ด C++ สำหรับวิธีข้างต้น
#include<bits/stdc++.h>
using namespace std;
const int MAX_CHAR = 26;
int main(){
string str = "h2d7e3f";
int ch[26] = {0};
int count = 0;
// เดินทางผ่านทุกตัวอักษรของสตริง
for (int i = 0; i < str.length(); i++){
// นับจำนวนการเกิดของแต่ละตัวอักษร
if (str[i] >= 'a' && str[i] <= 'z')
ch[str[i] - 97] = ch[str[i] - 97] + 1;
// ถ้าพบจำนวนเต็ม
else
count = count + (str[i] - '0');
}
string final = "";
// สร้างสตริงที่จัดเรียงแล้วด้วยความช่วยเหลือของ ch array
for (int i = 0; i < 26; i++){
char a = (char)('a' + i);
// แทรกตัวอักษรปัจจุบัน
// ลงในสตริงใหม่จนกว่าจำนวนจะหมด
while (ch[i]-- != 0)
final = final + a;
}
// และสุดท้าย แทรกผลรวมของจำนวนเต็มทั้งหมดในสตริง
if (count > 0)
final = final + to_string(count);
cout << "Rearranged string: " << final;
return 0;
}
ผลลัพธ์
Rearranged string: defh12
คำอธิบายโค้ด
- อาร์เรย์ ch ถูกเริ่มต้นขนาด 26 เพราะเราต้องนับจำนวนการเกิดของ 26 ตัวอักษร
- ในลูปแรก เราเดินทางผ่านสตริง สำหรับทุกตัวอักษร เราเพิ่มจำนวนของตัวอักษรนั้น สำหรับทุกจำนวนเต็ม เราบวกมันเข้าไปในตัวแปร count
- ในลูปที่สอง เราสร้างสตริงใหม่ที่จัดเรียงแล้วจากจำนวนทั้งหมด ซึ่งเรา append ตัวอักษรในสตริงตามจำนวนของพวกเขา
- และเรา append สตริงสุดท้ายกับผลรวมของจำนวนเต็มที่เรานับจากลูปแรก
สรุป
ในบทช่วยสอนนี้ เราอภิปรายวิธีการจัดเรียงสตริงในลำดับที่จัดเรียงแล้วและแก้ปัญหาที่เกี่ยวข้องจาก hash table approach เรายังอภิปรายโค้ด C++ สำหรับปัญหานี้ เราสามารถเขียนในภาษาโปรแกรมมิ่งอื่นๆ เช่น C, Java, Python ฯลฯ ได้ เราหวังว่าบทช่วยสอนนี้จะเป็นประโยชน์