Giả sử chúng ta có hai chuỗi P và Q có cùng độ dài chỉ có chữ thường, chúng ta phải đếm số lần xử lý trước tối thiểu trên chuỗi P cần thiết để làm cho nó bằng với chuỗi Q sau khi áp dụng các phép toán dưới đây -
-
Chọn bất kỳ chỉ mục i nào và hoán đổi các ký tự pi và qi.
-
Chọn bất kỳ chỉ mục i nào và hoán đổi các ký tự pi và pn - i - 1.
-
Chọn bất kỳ chỉ mục i nào và hoán đổi các ký tự qi và qn - i - 1.
Lưu ý - Giá trị của i trong phạm vi (0 ≤ i
Trong một lần di chuyển, chúng ta có thể thay đổi một ký tự trong P bằng bất kỳ ký tự nào khác trong bảng chữ cái tiếng Anh.
Vì vậy, nếu đầu vào giống như P =“pqprpqp”, Q =“qprpqpp”, thì đầu ra sẽ là 4 như thể chúng ta đặt P0 ='q', P2 ='r', P3 ='p' và P4 =' q 'và P sẽ là "qqrpqqp". Sau đó, chúng ta có thể nhận được các chuỗi bằng nhau bằng chuỗi hoạt động sau:hoán đổi (P1, Q1) và hoán đổi (P1, P5).
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
n:=kích thước của P
-
res:=0
-
đối với tôi trong phạm vi từ 0 đến n / 2, hãy thực hiện
-
my_map:=một bản đồ mới
-
my_map [P [i]]:=1
-
nếu P [i] giống P [n - i - 1] thì
-
my_map [P [n - i - 1]]:=my_map [P [n - i - 1]] + 1
-
-
nếu Q [i] nằm trong my_map, thì
-
my_map [Q [i]]:=my_map [Q [i]] + 1
-
-
nếu không,
-
my_map [Q [i]]:=1
-
-
nếu Q [n - i - 1] nằm trong my_map, thì
-
my_map [Q [n - 1 - i]]:=my_map [Q [n - 1 - i]] + 1
-
-
nếu không,
-
my_map [Q [n - 1 - i]]:=1
-
-
size:=kích thước của my_map
-
nếu kích thước bằng 4 thì
-
res:=res + 2
-
-
ngược lại khi kích thước bằng 3 thì
-
res:=res + 1 + (1 khi (P [i] giống P [n - i - 1]), nếu không thì 0)
-
-
ngược lại khi kích thước bằng 2 thì
-
res:=res + my_map [P [i]] không giống với 2
-
-
-
nếu n mod 2 giống 1 và P [n / 2] không giống Q [n / 2] thì
-
res:=res + 1
-
-
trả lại res
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
def count_preprocess(P, Q): n = len(P) res = 0 for i in range(n // 2): my_map = dict() my_map[P[i]] = 1 if P[i] == P[n - i - 1]: my_map[P[n - i - 1]] += 1 if Q[i] in my_map: my_map[Q[i]] += 1 else: my_map[Q[i]] = 1 if Q[n - i - 1] in my_map: my_map[Q[n - 1 - i]] += 1 else: my_map[Q[n - 1 - i]] = 1 size = len(my_map) if (size == 4): res += 2 elif (size == 3): res += 1 + (P[i] == P[n - i - 1]) elif (size == 2): res += my_map[P[i]] != 2 if (n % 2 == 1 and P[n // 2] != Q[n // 2]): res += 1 return res A = "pqprpqp" B = "qprpqpp" print(count_preprocess(A, B))
Đầu vào
"pqprpqp", "qprpqpp"
Đầu ra
4