สมมติว่าเรามีสตริง s และตัวเลข k ตัวอักษรแต่ละตัวในสตริงจะเป็นจุด ('.') หรือ 'x' โดยจุดหมายถึงพื้นที่ว่าง และ 'x' หมายถึงคน เราต้องตรวจสอบว่าสามารถเลือกตำแหน่งมายืนได้หรือไม่ ที่ระยะห่างระหว่างเรากับคนที่ใกล้ที่สุดอย่างน้อย k (ระยะห่างระหว่างดัชนีที่อยู่ติดกันคือ 1)
ตัวอย่าง
หากอินพุตคือ s = "x...x..", k = 2 ผลลัพธ์จะเป็น True เนื่องจากเราสามารถยืนที่ s[2] หรือ s[6]
ขั้นตอนการแก้ปัญหา
pos:= ตำแหน่งของ'x'ในs, หากไม่มีจะเป็น -1- ถ้า
posเป็น -1 หรือpos >= kให้คืนค่าTrue last_x:=posdist_min:=2*k - 1- ลูปไม่รู้จบ:
next_x:= ตำแหน่งของ'x'ในsจากดัชนีlast_x + 1ถึงสุดท้าย (หากไม่มีจะเป็น -1)- ถ้า
next_xไม่ใช่ -1:- ถ้า
next_x - last_x - 1 >= dist_minให้คืนค่าTrue last_x:=next_x
- ถ้า
- อื่นๆ:
- ถ้า
len(s) - last_x - 1 >= kให้คืนค่าTrue - คืนค่า
False
- ถ้า
- คืนค่า
None
การใช้งาน
class Solution:
def solve(self, s, k):
pos = s.find("x")
if pos == -1 or pos >= k:
return True
last_x = pos
dist_min = 2 * k - 1
while True:
next_x = s.find("x", last_x + 1)
if next_x != -1:
if next_x - last_x - 1 >= dist_min:
return True
last_x = next_x
else:
if len(s) - last_x - 1 >= k:
return True
return False
return None
ob = Solution()
print(ob.solve("x...x..", 2))
อินพุต
"x...x..", 2
เอาต์พุต
True