Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Di chuyển khoảng trắng về đầu chuỗi trong Python (Single Pass)

Cho chuỗi, di chuyển tất cả khoảng trắng (space) về phía trước, giữ nguyên thứ tự các ký tự khác. Ví dụ: "tutorials point " → " tutorialspoint".

Thuật toán duyệt 1 lần (Single traversal)

  1. Đếm số space: space_count = s.count(' ').
  2. Tạo chuỗi space: ' ' * space_count.
  3. Lọc ký tự non-space: list comprehension hoặc filter.
  4. Ghép: spaces + non_spaces.

Mã nguồn

string = "tutorials point "
chars = [ch for ch in string if ch != ' ']
spaces_count = string.count(' ')
new_string = ' ' * spaces_count + ''.join(chars)
print(repr(new_string))  # '  tutorialspoint'

Kết quả

  tutorialspoint

Ví dụ 2

string = "I am a python programmer."
chars = [ch for ch in string if ch != ' ']
spaces_count = string.count(' ')
new_string = ' ' * spaces_count + ''.join(chars)
print(repr(new_string))

Kết quả

   Iamapythonprogrammer.

Phân tích độ phức tạp

  • Time: O(n) - duyệt chuỗi 2 lần (count + listcomp), vẫn O(n).
  • Space: O(n) - tạo list chars và string mới.
  • True single-pass (1 loop) có thể dùng itertools.filterfalse nhưng phức tạp hơn, không cần thiết.

Cách khác: split + join

# Nhanh hơn cho chuỗi dài
parts = string.split(' ')
space_count = len(parts) - 1
new_string = ' ' * space_count + ''.join(parts)

Lưu ý: split() mặc định tách mọi whitespace, split(' ') chỉ tách space đơn.

Kết luận

Cách count + listcomp + join rõ ràng, dễ hiểu, đủ nhanh cho hầu hết trường hợp. Đề bài "single traversal" thường mong đợi thuật toán 1 loop, nhưng Pythonic way ưu tiên readability.