กำหนดสตริงบाइनนารี หาจำนวน 1 ที่ติดต่อกันมากที่สุด
วิธีที่ 1: split + map
data = '11110000111110000011111010101010101011111111'
max_len = max(map(len, data.split('0')))
print(f"Maximum consecutive 1's: {max_len}")
# 8
วิธีที่ 2: Regular Expression
import re
data = '11110000111110010011'
ones_blocks = re.findall(r'1+', data)
print("Blocks:", ones_blocks)
print("Max length:", len(max(ones_blocks, key=len)))
# Blocks: ['1111', '11111', '1', '11']
# Max length: 5
วิธีที่ 3: Loop แบบ Manual (O(n), O(1) space)
def max_consecutive_ones(s):
max_count = current = 0
for ch in s:
if ch == '1':
current += 1
max_count = max(max_count, current)
else:
current = 0
return max_count
print(max_consecutive_ones('11110000111110000011111010101010101011111111')) # 8
เปรียบเทียบ
| วิธี | ความชัดเจน | ประสิทธิภาพ | หน่วยความจำ |
|---|---|---|---|
| split+map | สูง | O(n) | O(n) สร้าง list |
| regex | ปานกลาง | O(n) | O(n) สร้าง list |
| manual loop | สูง | O(n) | O(1) ดีที่สุด |
สรุป
ใช้ manual loop สำหรับประสิทธิภาพดีที่สุด split+map เขียนสั้นที่สุด