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

ตรวจสอบว่าความถี่ของอักขระอยู่ใน Recaman Series ใน Python


สมมติว่าเรามีสตริงตัวพิมพ์เล็ก s เราต้องตรวจสอบว่าการเกิดขึ้นของตัวอักษรใน s หลังจากการจัดเรียงในลักษณะที่เป็นไปได้ใดๆ จะสร้างลำดับของ Recaman หรือไม่ (ละเว้นเทอมแรก)

ลำดับของ Recaman มีดังนี้ −

$$a_{n}=\begin{cases}\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:0(if\:n=0 ) &\\a_{n-1}-n(if\:a_{n}-n>0\wedge not\:present\in sequence) &\\\:\:\:\:\:\:\ :\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:\:a_{n-1}+n(มิฉะนั้น)\end{กรณี }$$

บางรายการของ Recaman's Sequence ได้แก่ [0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11, 22, 10, 23, 9, 24,...] (เทอมแรกคือ ละเว้นเนื่องจากนี่คือ 0)

ดังนั้น หากอินพุตเป็น s ="pppuvuuqquuu" เอาต์พุตจะเป็น True เนื่องจากอักขระและความถี่คือ (p, 3), (u, 6), (v, 1) และ (q, 2) ดังนั้นความถี่จึงก่อตัวเป็นสองสามเทอมแรกของ Recaman's Sequence [1, 3, 6, 2]

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

  • freq :=แผนที่ที่มีอักขระทั้งหมดเป็น s และความถี่
  • n :=ขนาดของความถี่
  • array :=first n เงื่อนไขลำดับของ Recaman
  • f :=1
  • สำหรับอักขระแต่ละตัวในความถี่ ให้ทำ
    • is_found :=0
    • สำหรับ j ในช่วง 1 ถึง n ทำ
      • ถ้า freq[keys] เหมือนกับ array[j] แล้ว
        • is_found :=1
        • ออกมาจากวงจร
    • ถ้า is_found เป็นเท็จ
      • f :=0
      • ออกมาจากวงจร
  • คืนค่า True เมื่อตั้งค่า f เป็นเท็จ

ตัวอย่าง

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

from collections import defaultdict
def recaman(array, n) :
   array[0] = 0
   for i in range(1, n + 1):
      temp = array[i - 1] - i
      for j in range(i):
         if array[j] == temp or temp < 0:
            temp = array[i - 1] + i
            break
      array[i] = temp
def solve(s) :
   freq = defaultdict(int)
   for i in range(len(s)) :
      freq[s[i]] += 1
   n = len(freq)
   array = [0] * (n + 1)
   recaman(array, n)
   f = 1
   for keys in freq.keys() :
      is_found = 0
      for j in range(1, n + 1) :
         if freq[keys] == array[j]:
            is_found = 1
            break;
      if not is_found:
         f = 0
         break
   return True if f else False
s = "pppuvuuqquuu"
print(solve(s))

อินพุต

"pppuvuuqquuu"

ผลลัพธ์

True