เรามีสตริง และต้องการย้ายช่องว่างทั้งหมดไปอยู่หน้าสตริง (Front) ในการเดินทางครั้งเดียว (Single Traversal)
ตัวอย่าง
Input: "tutorials point " Output: " tutorialspoint" (ช่องว่าง 2 ช่องอยู่หน้า) Input: "I am a python programmer." Output: " Iamapythonprogrammer." (ช่องว่าง 3 ช่องอยู่หน้า)
อัลกอริทึม
1. กำหนดสตริง
2. ดึงตัวอักษรที่ไม่ใช่ช่องว่างเก็บไว้ (list comprehension)
3. นับจำนวนช่องว่างด้วย str.count(' ')
4. สร้างสตริงใหม่: ' ' * จำนวนช่องว่าง + ตัวอักษรที่ไม่ใช่ช่องว่าง
5. พิมพ์ผลลัพธ์โค้ดตัวอย่าง
string = "tutorials point "
# ตัวอักษรที่ไม่ใช่ช่องว่าง
chars = [char for char in string if char != " "]
# นับช่องว่าง
spaces_count = string.count(' ')
# สร้างสตริงใหม่: ช่องว่างอยู่หน้า + ตัวอักษรอื่นๆ
new_string = " " * spaces_count + "".join(chars)
print(repr(new_string))ผลลัพธ์
' tutorialspoint'
ตัวอย่างที่ 2
string = "I am a python programmer."
chars = [char for char in string if char != " "]
spaces_count = string.count(' ')
new_string = " " * spaces_count + "".join(chars)
print(repr(new_string))ผลลัพธ์
' Iamapythonprogrammer.'
สรุป
วิธีนี้ใช้ list comprehension กรองตัวอักษร และ count() นับช่องว่าง แล้วรวมกัน ใช้เวลา O(n) และเดินทางผ่านสตริงครั้งเดียว (single traversal สำหรับ list comprehension) หากมีข้อสงสัย สามารถถามได้ในส่วนความคิดเห็น