สมมติว่าเรามีสตริงตัวพิมพ์เล็ก 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