Khi xử lý biểu diễn nhị phân của số, đôi khi chúng ta cần tìm số lượng 1 liên tiếp nhiều nhất. Bài viết này cho thấy hai cách để tìm ra điều đó.
Sử dụng Split và Map
Hàm split trong Python có thể tách chuỗi cho trước thành nhiều chuỗi. Chúng ta tách bằng số 0 và hàm map dùng để tìm độ dài lớn nhất trong các phần tách được.
Ví dụ
du_lieu = '11110000111110000011111010101010101011111111'
def do_dai_max_1_lien_tiep(du_lieu):
print("Số lượng 1 liên tiếp tối đa: ", max(map(len, du_lieu.split('0'))))
do_dai_max_1_lien_tiep(du_lieu)
Kết quả
Chạy mã trên cho kết quả sau:
Số lượng 1 liên tiếp tối đa: 8
Sử dụng biểu thức chính quy
Mô-đun re trong Python cũng có thể dùng để đếm số 1 liên tiếp tối đa. Ở đây ta tìm mẫu 1+ cho biết một hoặc nhiều số 1 liên tiếp. Sau đó tìm độ dài lớn nhất trong các mẫu đó.
Ví dụ
du_lieu = '11110000111110010011'
import re
cac_khoi_1 = re.findall(r"1+", du_lieu)
print("Các khối 1: ", cac_khoi_1)
print("Số 1 liên tiếp tối đa =", len(max(cac_khoi_1, key=len)))
Kết quả
Chạy mã trên cho kết quả sau:
Các khối 1: ['1111', '11111', '1', '11'] Số 1 liên tiếp tối đa = 5