Giả sử chúng ta có hai chuỗi không rỗng s và t có cùng độ dài. Chúng ta cần phân hoạch chúng thành các chuỗi con sao cho mỗi cặp chuỗi con của s và t có cùng kích thước và là anagram của nhau. Tìm các chỉ số cắt để có số lượng phân đoạn tối đa. Nếu không tìm thấy kết quả, trả về danh sách rỗng.
Ví dụ, nếu đầu vào là s = "bowcattiger", t = "owbactietgr", thì đầu ra sẽ là [0, 3, 5, 6, 10], vì ta có thể phân hoạch chuỗi thành 5 phân đoạn sao cho mỗi chuỗi con là anagram của nhau: s = ["bow", "ca", "t", "tige", "r"], t = ["owb", "ac", "t", "ietg", "r"].
Các bước giải quyết:
- Khởi tạo danh sách
intervalsrỗng. - Tạo bản đồ tần suất ký tự
cschosvàctchot. - Nếu
cskhácct, trả về danh sách rỗng. - Duyệt
xtừ độ dài củas- 1 xuống 0:- Giảm tần suất của
s[x]trongcsvàt[x]trongct. - Nếu
csbằngct, thêmxvàointervals.
- Giảm tần suất của
- Sắp xếp
intervalsvà trả về.
Ví dụ minh họa
from collections import Counter
class Solution:
def solve(self, a, b):
intervals = []
ca = Counter(a)
cb = Counter(b)
if ca != cb:
return []
for x in reversed(range(len(a))):
ca[a[x]] -= 1
cb[b[x]] -= 1
if ca == cb:
intervals.append(x)
return sorted(intervals)
ob = Solution()
s = "bowcattiger"
t = "owbactietgr"
print(ob.solve(s, t))
Đầu vào
"bowcattiger", "owbactietgr"
Đầu ra
[0, 3, 5, 6, 10]