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
- nếu lần xuất hiện [i] không phải là 0, thì
- 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
- nếu lần xuất hiện [j] giống như lần xuất hiện 1, thì
- nếu lần xuất hiện [j] không phải là 0, thì
- đố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 lần xuất hiện [k] giống với lần xuất hiện 1, thì
- nếu Occr1_cnt> 1 và Occr2_cnt> 1, thì
- trả về Sai
- nếu lần xuất hiện [k] không phải là 0, thì
- 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