สมมติว่าเรามีสตริงตัวพิมพ์เล็ก s เราต้องตรวจสอบว่าเราสามารถแปลง s เป็นสตริงที่ถูกต้องได้หรือไม่โดยลบอักขระไม่เกิน 1 ตัว ในที่นี้ สตริงที่ถูกต้องหมายถึงสตริง str ซึ่งสำหรับอักขระที่ไม่ซ้ำทั้งหมดใน str ความถี่ของอักขระแต่ละตัวจะเท่ากัน
ดังนั้น หากอินพุตเป็น s ="xyyzx" ผลลัพธ์จะเป็น True เนื่องจากเราสามารถลบ z ได้ จากนั้นสตริงจะเป็น "xyyx" โดยที่ x และ y เกิดขึ้นเหมือนกัน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ขนาด :=26
- การเกิดขึ้น :=อาร์เรย์ขนาด 26 ซึ่งเป็นการจัดเก็บความถี่ของอักขระแต่ละตัวใน s
- occr1 :=0
- occr1_cnt :=0
- สำหรับฉันในช่วง 0 ถึงขนาด - 1 ทำ
- ถ้าเกิดขึ้น[i] ไม่ใช่ 0 แล้ว
- occr1 :=การเกิดขึ้น[i]
- occr1_cnt :=1
- ออกมาจากลูป
- ถ้าเกิดขึ้น[i] ไม่ใช่ 0 แล้ว
- occr2 :=0
- occr2_cnt :=0
- สำหรับ j ในช่วง i+1 ถึงขนาด - 1 ทำ
- ถ้าเกิดขึ้น[j] ไม่ใช่ 0 แล้ว
- ถ้าเหตุการณ์[j] เหมือนกับ occr1 แล้ว
- occr1_cnt :=occr1_cnt + 1
- มิฉะนั้น
- occr2_cnt :=1
- occr :=เหตุการณ์[j]
- ออกมาจากลูป
- ถ้าเหตุการณ์[j] เหมือนกับ occr1 แล้ว
- ถ้าเกิดขึ้น[j] ไม่ใช่ 0 แล้ว
- สำหรับ k ในช่วง j+1 ถึงขนาด - 1 ทำ
- ถ้าเหตุการณ์[k] ไม่ใช่ 0 แล้ว
- ถ้าเหตุการณ์[k] เหมือนกับ occr1 แล้ว
- occr1_cnt :=occr1_cnt + 1
- ถ้าเหตุการณ์[k] เหมือนกับ occr2 แล้ว
- occr2_cnt :=occr2_cnt + 1
- มิฉะนั้น
- คืนค่าเท็จ
- ถ้าเหตุการณ์[k] เหมือนกับ occr1 แล้ว
- ถ้า occr1_cnt> 1 และ occr2_cnt> 1 แล้ว
- คืนค่าเท็จ
- ถ้าเหตุการณ์[k] ไม่ใช่ 0 แล้ว
- คืนค่า True
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
size = 26
def solve(str):
occurrence = [0]*size
for i in range(len(str)): occurrence[ord(str[i])-ord('a')] += 1
occr1 = 0
occr1_cnt = 0
for i in range(size):
if (occurrence[i] != 0):
occr1 = occurrence[i]
occr1_cnt = 1
break
occr2 = 0
occr2_cnt = 0
for j in range(i+1,size):
if (occurrence[j] != 0):
if (occurrence[j] == occr1):
occr1_cnt += 1
else:
occr2_cnt = 1
occr = occurrence[j]
break
for k in range(j+1,size):
if occurrence[k] != 0:
if (occurrence[k] == occr1):
occr1_cnt += 1
if (occurrence[k] == occr2):
occr2_cnt += 1
else:
return False
if occr1_cnt > 1 and occr2_cnt > 1:
return False
return True
s = "xyyzx"
print(solve(s)) อินพุต
"xyyzx"
ผลลัพธ์
True