Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบว่าความถี่ของอักขระทั้งหมดสามารถเหมือนกันได้โดยการลบครั้งเดียวใน Python


สมมติว่าเรามีสตริงตัวพิมพ์เล็ก s เราต้องตรวจสอบว่าความถี่ของอักขระทั้งหมดเท่ากันหลังจากลบอักขระหนึ่งตัวหรือไม่

ดังนั้น หากอินพุตเป็นเหมือน s ="abbc" ผลลัพธ์จะเป็น True เนื่องจากเราสามารถลบหนึ่ง b เพื่อรับสตริง "abc" โดยที่ความถี่ของแต่ละองค์ประกอบคือ 1

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • การเกิดขึ้น :=แผนที่ที่มีอักขระ s และความถี่ทั้งหมด
  • หากการปรากฏของอักขระทั้งหมดใน s เหมือนกัน ดังนั้น
    • คืนค่า True
  • สำหรับอักขระแต่ละตัวใน s ทำ
    • อุบัติการณ์[ถ่าน] :=การเกิดขึ้น[อักขระ] - 1
    • หากการปรากฏของอักขระทั้งหมดใน s เหมือนกัน ดังนั้น
      • คืนค่า True
    • อุบัติการณ์[ถ่าน] :=การเกิดขึ้น[อักขระ] + 1
  • คืนค่าเท็จ

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

from collections import defaultdict
def allSame(occurrence):
   counts = list(occurrence.values())
   return all(element == counts[0] for element in counts)
def solve(s):
   occurrence = defaultdict(int)
   for char in s:
      occurrence[char] += 1
   if allSame(occurrence):
      return True
   for char in s:
      occurrence[char] -= 1
      if allSame(occurrence):
         return True
      occurrence[char] += 1
   return False
s = "abbc"
print(solve(s))

อินพุต

"abbc"

ผลลัพธ์

True