Computer >> Máy Tính >  >> Lập trình >> Python

Kiểm tra xem một chuỗi có tất cả các ký tự có cùng tần số với một biến thể được phép trong Python hay không

Giả sử chúng ta có một chuỗi chữ thường s, chúng ta phải kiểm tra xem chúng ta có thể chuyển s thành một chuỗi hợp lệ hay không bằng cách xóa nhiều nhất 1 ký tự. Ở đây, một chuỗi hợp lệ có nghĩa là một chuỗi str sao cho tất cả các ký tự duy nhất trong str tần số của mỗi ký tự là như nhau.

Vì vậy, nếu đầu vào là s =​​"xyyzx", thì đầu ra sẽ là True vì chúng ta có thể xóa z thì chuỗi sẽ là "xyyx" trong đó số lần xuất hiện của x và y là như nhau.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • kích thước:=26
  • xuất hiện:=một mảng có kích thước 26. Điều này đang lưu trữ tần số của mỗi ký tự trong s
  • Occr1:=0
  • Occr1_cnt:=0
  • đối với tôi trong phạm vi từ 0 đến kích thước - 1, thực hiện
    • nếu lần xuất hiện [i] không phải là 0, thì
      • Occr1:=xuất hiện [i]
      • Occr1_cnt:=1
      • ra khỏi vòng lặp
  • Occr2:=0
  • Occr2_cnt:=0
  • đối với j trong phạm vi i + 1 đến kích thước - 1, thực hiện
    • nếu lần xuất hiện [j] không phải là 0, thì
      • nếu lần xuất hiện [j] giống như lần xuất hiện 1, thì
        • Occr1_cnt:=Occr1_cnt + 1
      • nếu không,
        • Occr2_cnt:=1
        • tắc:=xuất hiện [j]
        • ra khỏi vòng lặp
  • đối với k trong phạm vi j + 1 đến kích thước - 1, thực hiện
    • nếu lần xuất hiện [k] không phải là 0, thì
      • nếu lần xuất hiện [k] giống với lần xuất hiện 1, thì
        • Occr1_cnt:=Occr1_cnt + 1
      • nếu lần xuất hiện [k] giống với lần xuất hiện 2, thì
        • Occr2_cnt:=Occr2_cnt + 1
      • nếu không,
        • trả về Sai
    • nếu Occr1_cnt> 1 và Occr2_cnt> 1, thì
      • trả về Sai
  • trả về True

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

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))

Đầu vào

"xyyzx"

Đầu ra

True