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

ตรวจสอบว่าสตริงมีอักขระทั้งหมดที่มีความถี่เท่ากันหรือไม่โดยอนุญาตให้ใช้รูปแบบเดียวใน Python


สมมติว่าเรามีสตริงตัวพิมพ์เล็ก 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
      • ออกมาจากลูป
  • occr2 :=0
  • occr2_cnt :=0
  • สำหรับ j ในช่วง i+1 ถึงขนาด - 1 ทำ
    • ถ้าเกิดขึ้น[j] ไม่ใช่ 0 แล้ว
      • ถ้าเหตุการณ์[j] เหมือนกับ occr1 แล้ว
        • occr1_cnt :=occr1_cnt + 1
      • มิฉะนั้น
        • occr2_cnt :=1
        • occr :=เหตุการณ์[j]
        • ออกมาจากลูป
  • สำหรับ k ในช่วง j+1 ถึงขนาด - 1 ทำ
    • ถ้าเหตุการณ์[k] ไม่ใช่ 0 แล้ว
      • ถ้าเหตุการณ์[k] เหมือนกับ occr1 แล้ว
        • occr1_cnt :=occr1_cnt + 1
      • ถ้าเหตุการณ์[k] เหมือนกับ occr2 แล้ว
        • occr2_cnt :=occr2_cnt + 1
      • มิฉะนั้น
        • คืนค่าเท็จ
    • ถ้า occr1_cnt> 1 และ occr2_cnt> 1 แล้ว
      • คืนค่าเท็จ
  • คืนค่า 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